Следит ли 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}}

Вот плнкр

  1. Следит ли ng-init за изменением экземпляра свойства, как это делает ng-model?
  2. Как я могу наблюдать за изменениями в свойствах, созданных ng-init?
  3. Что не так с функцией $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}}

plnkr

Другие вопросы по тегам