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

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