Следит ли ng-init за изменением экземпляра свойства, как это делает ng-model?
Следит ли ng-init за изменением экземпляра свойства, как это делает ng-model?
Очевидно нет, поэтому я установил часы, как показано ниже:
app.js
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.$watch('myProp1', function(newVal, oldVal){
$scope.myProp1 = newVal
})
});
HTML
<body ng-controller="MainCtrl">
<input ng-init='myProp="my property"'>{{myProp}}</br>
<input ng-init='myProp1="my 1 property"'>{{myProp1}}</br>
<input ng-init='myProp11="my 11 property"' ng-model='myProp11'>{{myProp11}}
Вот плнкр
- Следит ли ng-init за изменением экземпляра свойства, как это делает ng-model?
- Как я могу наблюдать за изменениями в свойствах, созданных ng-init?
- Что не так с функцией $watch выше?
1 ответ
Следит ли ng-init за изменением экземпляра свойства, как это делает ng-model?
Нет, это только для инициализации свойства в области. Я бы порекомендовал не использовать его. Разметка не для инициализации переменных, вы должны делать это как можно чаще в своем контроллере.
Как я могу наблюдать за изменениями в свойствах, созданных ng-init?
Вы можете смотреть так же, как и любое другое свойство, но просмотр не означает, что часы сработают. Часы запускаются только во время цикла дайджеста, а цикл дайджеста вызывается только в том случае, если angular как-то связан с определенным действием.
Что не так с функцией $ watch выше?
Ваши часы на prop1
никогда не будет выполнено (после инициализации ng Init), потому что вы никогда не меняете значение модели, так как к нему не привязан ngModel. И нет никакого углового воздействия на элемент, и, следовательно, цикл дайджеста не произойдет.
В качестве примера просто прикрепите событие keyup к элементу и присвойте значение input свойству myProp
потому что вы зарегистрировали обработчик keyup, он запустит цикл дайджеста после запуска обработчика, и вы увидите, как выполняются часы и обновляется привязка
<input ng-init='myProp="my property"' ng-keyup="test(myProp=$event.target.value)">{{myProp}}