Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当我在$provide.decorator中更改了输入值时,为什么我的角度形式没有变脏?_Javascript_Angularjs_Directive - Fatal编程技术网

Javascript 当我在$provide.decorator中更改了输入值时,为什么我的角度形式没有变脏?

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

我想在angular.com中扩展默认的inputDirective,所以我编写了以下代码:

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;
    })
})