如何在自定义指令中包装 ng-change
How to wrap ng-change in custom directive?
我有一个简单的指令叫做input-text
,它基本上包装了一个输入控件。
赋予input-text
属性的值将传递给ng-model
并且工作正常。现在我还想传递一个函数,该函数通过传递给名为 input-change
的属性来调用模型的任何更改。
angular.module('test').directive('inputText', function() {
return {
restrict : 'A',
scope : {
inputText : '='
},
template : '<input ng-model="inputText" />',
link : function(scope, element, attr) {
var model = element.find('input').controller('ngModel');
model.$viewChangeListeners.push(function() {
scope.$parent.$eval(attr.inputChange);
});
}
}
});
有关更多详细信息,请参阅 http://plnkr.co/edit/qC7FlxVNKH4SrAhLoJy4。
每次我在控件中键入时都会调用传递给指令的函数,但我在控制台中记录的值不是控件的当前$viewValue
(而是前一个)。
我还尝试了一种不同的方法,将给定input-change
的字符串传递给输入控件上的ng-change
,如下所示:
angular.module('test').directive('inputText', function() {
return {
restrict : 'A',
scope : {
inputText : '=',
inputChange : '&'
},
template : '<input ng-model="inputText" ng-change="inputChange()" />',
}
});
http://plnkr.co/edit/SutAFnCgo10QNmvBFsDs
但输出与上面的示例相同。
有人可以解释这种行为或告诉这里出了什么问题吗?
解决此问题的一种方法是在其input-change
绑定上显式公开输入值。为此,您可以使用此模板:
<input ng-model="inputText" ng-change="inputChange({value: inputText})" />
然后使用内部作用域中的value
变量,而不是外部作用域中的test.model.name
变量:input-change="test.callback(value)"
http://plnkr.co/edit/SNatIAkPIHFSMooMWWFS?p=preview
第二种选择是使用 scope.$watch
监视更改,并且仅在触发时触发函数:
link: function(scope) {
scope.$watch('inputText', function(n) {
scope.inputChange();
});
}
http://plnkr.co/edit/Vrwe3SC3ejMG4aFIwBTU?p=preview
相关文章:
- 为什么“ng checked”不适用于“ng change”
- 使用 ng-change 对输入类型数据进行 JavaScript 取消事件
- Angularjs slider with ng-change
- 从服务器获取数据,并使用$http服务和ng-change在select事件上显示它
- ng-change不适用于ng选项
- 如何在AngularJS ng-click(或ng-change,..)中调用服务函数
- 何时在 Angularjs 中使用 $watch 或 ng-change
- ng-change在我的指令中不适用于选择
- 在调用 ng-change 之前验证复选框
- 角度新手:尝试使用 ng-change,获取“模块'ngModel'不可用”
- 当 ng-change 事件发生时,函数不会在角度 js 中调用
- ng-change在AngularJS应用程序中不起作用
- AngularJS ng-change not calling function
- 重新编译角度指令以编程方式添加 ng-module 和 ng-change
- $event未在文本输入的 ng-change 中定义
- 使用角度,如何在下拉列表中获取 ng-change 上的选定值
- Angularjs (ng-click, ng-change) 指令不适用于 icheck 插件
- 使用 ng-change Angular 隐藏元素
- 如何在角度 UI 开关中获得 ng-change 事件
- 如何在自定义指令中包装 ng-change