У меня есть двусторонняя привязка данных, которая не изменяет значение переменной, отправленной в директиву.AngularJS Директива Двухсторонняя привязка данных не работает при наблюдении булевых
Моя директива часы для триггера и дает фокус на ассоциатов элемент (на основе кода найден здесь SO):
app.directive('focusMe', function ($timeout) {
return {
scope: {
trigger: '=focusMe'
},
link: function (scope, element, attrs) {
scope.$watch('trigger', function(value) {
console.log("directive value: " + value);
console.log("directive start: " + scope.trigger);
if (value === true) {
$timeout(function() {
element[0].focus();
scope.trigger = false;
console.log("directive end: " + scope.trigger);
});
}
});
}
}
});
В HTML я называю это следующим образом:
<input type="text" ng-model="item.value" focus-me="focusInput" />
Когда я запускаю его в первый раз, он работает - потому что переменная focusInput
переключает свое значение. Но focusInput
в области контроллеров (вне директивы) не возвращается к false
, когда директива завершается.
Этот переход на false
должен произойти, когда я позвоню scope.trigger = false
, предполагая, что я понимаю, что должно произойти.
Отсутствует, что приведет к тому, что двусторонняя привязка не приведет к возврату значения переменной, переданной в директиву?
UPDATE 01:
Для размещения вопроса я удалил небольшой кусочек кода. HTML на самом деле выглядит следующим образом:
<input type="text" ng-model="item.value" focus-me="focusInput" ng-if="item.condition != 'matches' && item.condition != 'does not match'" />
Если input
поля скрывает, а затем повторно показано (на основе ng-if
) директива будет правильно дать фокус в первый раз focusInput
изменения. После этого он перестанет работать, если процесс скрыть/показать не будет повторяться.