Javascript 当我在$provide.decorator中更改了输入值时,为什么我的角度形式没有变脏?
我想在angular.com中扩展默认的inputDirective,所以我编写了以下代码:Javascript 当我在$provide.decorator中更改了输入值时,为什么我的角度形式没有变脏?,javascript,angularjs,directive,Javascript,Angularjs,Directive,我想在angular.com中扩展默认的inputDirective,所以我编写了以下代码: module.config(function($provide){ $provide.decorator('inputDirective',function($delegate){ var directive = $delegate[0]; var originalLink = directive.link; directive.compile=func
module.config(function($provide){
$provide.decorator('inputDirective',function($delegate){
var directive = $delegate[0];
var originalLink = directive.link;
directive.compile=function(ele,attr,transclude){
return function(scope,ele,attr,contr){
ele.on('click',function(){
scope.amount=888;
})
originalLink.apply(this,arguments);
return originalLink;
}
}
})
})
<form name='simpleForm'>
<input name='times' ng-model='times'/>
</form>
module.config(函数($provide){
$Provider.decorator('inputDirective',函数($delegate){
var指令=$delegate[0];
var originalLink=directive.link;
directive.compile=函数(ele、attr、transclude){
返回函数(范围、元素、属性、控制){
ele.on('click',function(){
范围:金额=888;
})
应用(这个,参数);
返回原始链接;
}
}
})
})
由于这些代码,我希望得到这样的结果:当我单击输入元素时,控制器中的$scope.amount将是888。
现在,它确实起了作用,但是$scope.simpleForm和$scope.simpleForm.times仍然是原始的。$dirty属性仍然为false
我很困惑,为什么会这样
我需要帮助。谢谢大家。首先,我不确定您的代码是否可以工作:
链接
函数应该从编译
函数输出。
那么,我认为您正在使用jQuery。使用jQlite(AngularJS的香草版附带),您必须使用bind
绑定事件
最后,$dirty
标志正在开箱即用:当您开始键入输入时,它将变为true
)
HTML部分:
<div>
<form name='simpleForm'>
<input name='times' ng-model='times'/>
<p ng-show="simpleForm.times.$dirty">Is dirty !</p>
</form>
</div>
附言:这样你就可以试试……非常感谢你的回复。它解决了我的问题!
var myApp = angular.module('myApp',[]);
myApp.config(function($provide){
$provide.decorator('inputDirective',function($delegate){
var directive = $delegate[0];
var compileFn = directive.compile;
directive.compile=function(ele,attr,transclude){
var linkFn = compileFn.apply(this, arguments);
return function(scope,ele,attr,contr){
//debugger;
ele.bind('click', function() {
// debugger;
alert('ok');
});
linkFn.apply(this,arguments);
return linkFn;
}
}
return $delegate;
})
})