Javascript 如何在自定义指令中包装ng更改?
我有一个名为Javascript 如何在自定义指令中包装ng更改?,javascript,angularjs,Javascript,Angularjs,我有一个名为input text的简单指令,它基本上包装了一个输入控件 指定给input text属性的值被传递到ng model并正常工作。现在,我还想通过将该函数传递给名为input change的属性,来传递在模型发生任何更改时调用的函数 angular.module('test').directive('inputText', function() { return { restrict : 'A', scope : { inputText : '='
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);
});
}
}
});
但输出与上面示例中的相同
有人能解释一下这个行为或者告诉我这里出了什么问题吗?解决这个问题的一种方法是显式地公开其
输入更改
绑定上的输入值。为此,您可以使用此模板:
<input ng-model="inputText" ng-change="inputChange({value: inputText})" />
我以前也尝试过您的第一个建议,但这是非常不灵活的,因为我可能希望为函数添加可变数量的参数。第二个很明显,效果很好,谢谢。尽管如此,我还是想知道,在我解释的案例中,为什么这种行为是奇怪的。@M.Redemske,使用选项1,没有什么可以阻止您使用其他变量。它需要将
值添加为本地值。例如,您可以编写test.callback(model1,value,model2)
,其中model1和model2来自上层作用域,而value
由指令提供。至于你为什么会有这个问题,我个人也明白了,我从来都不知道这是Angular本身的一个bug,还是不清楚ng的变化。
<input ng-model="inputText" ng-change="inputChange({value: inputText})" />
link: function(scope) {
scope.$watch('inputText', function(n) {
scope.inputChange();
});
}