Sie versuchen, die Eigenschaft des Attributs in der Direktive zu überwachen. Sie können die Eigenschaft von Attributänderungen mit $ watch () wie folgt beobachten:
angular.module('myApp').directive('conversation', function() {
return {
restrict: 'E',
replace: true,
compile: function(tElement, attr) {
attr.$observe('typeId', function(data) {
console.log("Updated data ", data);
}, true);
}
};
});
Denken Sie daran, dass ich hier in der Direktive die Funktion 'Kompilieren' verwendet habe, da Sie nicht erwähnt haben, ob Sie Modelle haben und ob dies leistungsabhängig ist.
Wenn Sie Modelle haben, müssen Sie die Funktion ' Kompilieren ' in ' Verknüpfen ' ändern oder ' Controller ' verwenden und die Eigenschaft von Modelländerungen überwachen. Verwenden Sie $ watch () und nehmen Sie den Winkel {{}} Klammern aus der Eigenschaft, Beispiel:
<conversation style="height:300px" type="convo" type-id="some_prop"></conversation>
Und in der Richtlinie:
angular.module('myApp').directive('conversation', function() {
return {
scope: {
typeId: '=',
},
link: function(scope, elm, attr) {
scope.$watch('typeId', function(newValue, oldValue) {
if (newValue !== oldValue) {
console.log("I got the new value! ", newValue);
}
}, true);
}
};
});
=
inscope:
eine bidirektionale Bindung erstellt, dh Änderungen im untergeordneten Bereich werden auf den übergeordneten Bereich übertragen und umgekehrt - ist dies nicht der Fall? Ich muss in der Lage sein, eine Anweisung anzuweisen, sich selbst vom übergeordneten Controller zu aktualisieren.