选择自定义指令和ng-change
Select custom directive and ng-change
使用带有自定义指令的<select>
,我想在值改变时运行一个函数。
<select name="user_type" ng-model="user_type" user-type ng-change="check_type()">
指令gb_dash.directive('userType', function(){
return{
restrict: 'A',
require: '^ngModel',
scope:{
check_type: '&'
},
link: function(scope, elem, attrs){
scope.check_type = function(){
console.log('changed');
}
}
}
});
由于您有一个隔离作用域,因此您的check_type
与ng-change
表达式不在同一作用域中。你也不希望这样。
相反,ng-model
提供了一种向ngModel.$viewChangeListeners
注册侦听器的方法-这正是ngChange
指令使用的-挂钩到视图模型更改事件。
require: "ngModel",
scope: { }, // to mimic your directive - doesn't have to be isolate scope
link: function(scope, element, attrs, ngModel){
ngModel.$viewChangeListeners.push(function(){
console.log('changed');
}
}
由于您的隔离作用域,您可以包含对$parent
的调用来实现您的结果。
link: function(scope, elem, attrs) {
scope.$parent.check_type = function() {
console.log('changed');
}
}
但是,调用$parent
可能不适合您的情况。
或者你可以放弃ng-change
,而把$watch
换成ngModel
。这可以这样完成…
link: function(scope, elem, attrs, ngModel) {
scope.$watch(function() {
return ngModel.$modelValue;
}, function(newValue, oldValue) {
console.log('model value changed...', newValue, oldValue);
}, true);
}
JSFiddle Link - $parent
demo
JSFiddle Link - $watch
demo
相关文章:
- 为什么“ng checked”不适用于“ng change”
- 如何正确使用 ng-cloak 指令
- 为什么ng选项指令需要ng模型
- 如何为通过ng-view指令或ng-controller指令创建的每个新作用域设置侦听器
- ng-click指令没有调用整个函数
- AngularJS ng-if指令在移除元素之前,即使条件为false,也会短暂呈现
- 在表上使用 ng-repeat 指令
- 使用 ng-change 对输入类型数据进行 JavaScript 取消事件
- 如何扩展 Angularjs ng-include 指令
- ng-change在我的指令中不适用于选择
- 重新编译角度指令以编程方式添加 ng-module 和 ng-change
- Angularjs (ng-click, ng-change) 指令不适用于 icheck 插件
- 在IE9和ie10中,angularjs的ng-change不会触发ng-model-onblur指令
- 在Angularjs中使用指令触发ng-change
- 将ng-change应用于一个,该文件已经使用了它自己的指令
- Ng-change和custom指令在初始化时使作用域变量未定义
- 单选按钮不会对ng-change指令做出反应
- 选择自定义指令和ng-change
- 如何在自定义指令中包装 ng-change
- 使用双向绑定和ng-change的AngularJS指令