观察父元素上指令的 ngModel 值变化
Watch ngModel value change from directive on parent element
我有一个指令,它监视输入字段中的变化
directive('autocomplete', function(){
return {
link: function(scope, element, attrs){
scope.$watch(attrs.ngModel, function(){
console.log('change');
});
}
};
});
这适用于以下元素
<input type='text' ng-model='searchTerm' autocomplete>
但是,如果我把我的指令放在祖先元素上,就像这样:
<div autocomplete>
<input type='text' ng-model='searchTerm'>
</div>
那我怎么还能观察输入的变化呢?
简单地说:你可以,但你不应该。
首先,ngModel
指令有一个控制器。它的$viewChangeListeners
属性可能是您真正想要使用的属性(因为您的"自动完成"指令可能只是在寻找视图值更改(。您只需将更改侦听器推送到该数组中即可。
其次(更重要的是(,您不应该仅从祖先元素直接使用这种功能。如果你想与ngModel
交互,你最好把你的指令放在使用它或其后代的元素上(而不是带有<input>
的选项(。这并不能阻止你把一些共同的逻辑放在祖先身上并与那个祖先互动(就像ngModel
与ngForm
互动一样(。
如果你不关心应该和不应该,你总是可以
- 在您的输入上放一个
name
并从ngForm
获取ngModelController
(如果您的指令在其下(,或者 - 找到
<input>
并使用angular.element(...).controller('ngModel')
获取ngModelController
。
相关文章:
- 单击页面上的链接后高度发生变化
- 如何将ngrepeat下的ngmodel绑定到$scope
- React redux初始化功能,无论状态变化如何
- 角度ng变化或ng点击选择can'不起作用
- 每个选择器的Jquery css颜色都在变化,但字体大小却没有变化
- JS幻灯片与CSS背景颜色变化
- 重新加载页面时Javascript变量发生变化
- 如何获得Bootstrap Datepicker的年和月,因为它在变化
- 如何用jquery替换字符串中可能变化的字符
- 检测数据的变化
- 如何检测和打印变化变量LESS
- 当文本不断变化时,如何避免在按钮内移动文本
- 当数据库中的某些内容发生变化时调用HTTP方法Meteor.js
- 如何使用javascript将textbox的值赋给ngModel textbox
- jQuery将侦听器的大小调整为只触发宽度的变化
- 根据元素高度和宽度的百分比变化增加或减少字体大小
- 调用$.each()函数时上下文发生变化
- 通过ngModel访问html元素
- 观察父元素上指令的 ngModel 值变化
- 观察ngmodel中的任何变化