【发布时间】:2015-05-29 16:38:09
【问题描述】:
我有一个双向数据绑定,它不会改变发送到指令的变量的值。
我的指令监视触发器并将焦点放在 associates 元素上(基于在 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。
当我调用scope.trigger = false 时,应该会切换回false,假设我知道应该发生什么。
缺少什么会导致双向绑定不将值推回传递给指令的变量?
更新 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 第一次更改时正确提供焦点。之后它将再次停止工作......除非重复隐藏/显示过程。
【问题讨论】:
标签: javascript angularjs angularjs-directive