2016-12-29 5 views
0

Я хочу продлить inputDirective по умолчанию в angular.so я написал этот код:

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> 

С этого кодом, я хочу привести, как, что: $ scope.amount в моем контроллере будут 888, когда я нажимаю на вход элемент. Теперь, это действительно сработало, но $ scope.simpleForm и $ scope.simpleForm.times все еще являются первозданными. $ Грязные атрибуты по-прежнему являются ложными.

Я так смущен, почему так?

Мне нужна помощь. Спасибо всем .

ответ

0

Во-первых, я не уверен, что ваш код может работать: функция link должна выводиться из функции compile. Тогда, я думаю, вы используете jQuery. С jQlite (поставляется с версией Vanilla версии 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> 

JS часть:

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, так что вы можете попробовать ...

+0

Ve ry очень Танки для вашего ответа. Он решает мою проблему! –

 Смежные вопросы

  • Нет связанных вопросов^_^