2014-04-08 14 views
5

Ho una pagina Web con alcuni elementi HTML che non posso modificare. Mi piacerebbe collegare dinamicamente gli attributi di ng-model a questi e fare in modo che AngularJS si leghi nuovamente allo scope. Un esempio semplificato di ciò che voglio realizzare può essere trovata hereAngularJS: associazione tardiva del modello ng all'elemento dom

<script src="//code.jquery.com/jquery-2.1.0.min.js"></script> 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script> 
<script> 
function MyCtrl($scope) { 
    $scope.myModel1 = "Hi"; 
    $scope.myModel2 = "there"; 
    var myModel2 = angular.element("#myModel2"); 
    //This won't work 
    myModel2.attr("ng-model", "myModel2"); 
} 
</script> 
<div ng-app ng-controller="MyCtrl"> 
    <input type="text" ng-model="myModel1"/> 
    <!-- I can't touch this --> 
    <input type="text" id="myModel2" /> 
</div> 

risposta

11

È necessario utilizzare $compile (docs)

$compile(myModel2.attr("ng-model", "myModel2"))($scope); 

demo

Quando si carica la pagina, usi angolari $compile su l'HTML automaticamente, è così che sa quali elementi assegnare a quali direttive. Se modifichi semplicemente l'attributo come hai provato, l'angolare non lo sa. Devi usare $compile.

+0

Funziona! Grazie – matteo

+0

@matteo accettarlo allora? : P – Mosho

+0

Ci dispiace, ma non ho abbastanza punti reputazione per accettare la tua risposta; Tornerò ad esso quando lo faccio! – matteo

Problemi correlati