Angular BindOnce, что может помешать ему работать?
В настоящее время мы переходим на Angular 1.3, тестируя функциональность bindOnce. Я столкнулся с этой проблемой: точный фрагмент кода...
Код контроллера:
this.value = 'value';
this.clickTest = function () {
this.value = 'changed';
};
HTML:
//cm is the ControllerAs variable defined in the route
<p> {{ ::cm.value}} </p>
<button ng-click="cm.clickTest()"> CLICK </button>
... прекрасно работает в контроллере, но не работает в другом - в рабочем контроллере событие click не изменит значения, а в нерабочем - изменит значение - (код в обоих случаях одинаков контроллеры, меняется маршрутизация и видимо что-то еще меняется). Оба контроллера были опустошены, чтобы улучшить среду тестирования.
Теперь я хотел бы знать: есть ли что-то, что может помешать функционалу bindOnce работать должным образом? Есть ли что-то, что заставляет угловой код не удалять наблюдателя или включать его снова, несмотря на правильный синтаксис (::), который был использован в представлении?
Я работаю с Angular 1.3.2
2 ответа
Я думаю, что значение не меняется после клика, потому что контекст this
изменен для clickTest
функция
Попробуйте код ниже, надеюсь, что это работает
var vm = this;
vm.value = 'value';
vm.clickTest = function () {
vm.value = 'changed';
};
return vm;
Что касается bindOnce, я не думаю, что его можно связать снова после изменения значения в контроллере, и для тестирования кода нам не следует беспокоиться о представлении.
AngularJS 1.3 bind-Once не работает, когда включено расширение Batarang