2016-12-29 3 views
0

Ich mag die Standard-inputDirective in angular.so erweitere ich diesen Code geschrieben:

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> 

Da diesen Code, ich so führen will: Der $ scope.amount in meinem Controller 888 sein, wenn ich die Eingabe klicken Element. Nun, es hat wirklich funktioniert, aber die $ scope.simpleForm und $ scope.simpleForm.times sind immer noch unberührt. Die Attribute $ dirty sind immer noch falsch.

Ich bin so verwirrt, warum so?

Ich brauche Hilfe. Dank euch allen .

Antwort

0

Zuerst bin ich mir nicht sicher, ob Ihr Code funktionieren könnte: Die link-Funktion sollte von der compile-Funktion ausgegeben werden. Dann denke ich, dass Sie jQuery verwenden. Mit jQlite (mit der Vanilla-Version von AngularJS) müssen Sie Ihr Event an bind binden.

Schließlich ist die $dirty Flagge arbeitet aus dem Kasten heraus: es true wird, wenn Sie in der Eingabe der Eingabe beginnen :)

HTML-Teil:

<div> 
    <form name='simpleForm'> 
    <input name='times' ng-model='times'/> 
    <p ng-show="simpleForm.times.$dirty">Is dirty !</p> 
    </form> 
</div> 

JS Teil:

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

PS: I jsfiddled the code, damit Sie es versuchen können ...

+0

Ve ry sehr Tanks für Ihre Antwort. Es löst mein Problem! –

Verwandte Themen