Що ви намагаєтеся зробити, це відстежувати властивість атрибута в директиві. Ви можете спостерігати за властивістю змін атрибутів за допомогою $ obser () наступним чином:
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);
}
};
});
Майте на увазі, що я використовував функцію 'compile' у директиві тут, тому що ви не згадали, чи є у вас моделі, і чи це впливає на продуктивність.
Якщо у вас є моделі, вам потрібно змінити функцію " компіляції " на " посилання " або використовувати " контролер ", а для відстеження властивостей змін моделі слід використовувати $ watch () і взяти кутовий {{}} дужки з властивості, приклад:
<conversation style="height:300px" type="convo" type-id="some_prop"></conversation>
І в директиві:
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:
створює двостороннє прив'язку, тобто зміни дочірньої області дії поширюються до батьківської області і навпаки - це не так? Мені потрібно вміти сказати директиві, щоб оновити себе з батьківського контролера.