2

不工作我已在HTML中定義的指令myDirective如下:ngModelOptions在指令

<input id="myid" ng-model="myModel" value="{{myModel}}" my-directive dirvalue="3" min="0.5" spinner step="0.2" ng-disabled=" !someFunction()"> 

的指令:

myApp.directive('myDirective', ['InjectedService', 
     function (InjectedService) { 
      return { 
       require: 'ngModel', 
       restrict: 'A', 
       scope: { 
        dirvalue: "=" 
       }, 

       link: function (scope, element, attrs, ngModelController) { 
        if (ngModelController.$options === undefined || ngModelController.$options === null) { 
         ngModelController.$options = { 
          updateOn: 'blur', 
          debounce: 3000 
         }; 
        } 
       } 
      } 
     } 
]); 

我已經調試代碼,和ngModelController.$options被填充完全正常。 但我沒有得到必要的行爲,即去抖動不起作用!

請解釋我做錯了什麼!

回答

1

你應該重寫鏈路功能

myApp.directive('myDirective', ['$compile','InjectedService', 
    function ($compile, InjectedService) { 
    return { 
    require: 'ngModel', 
    restrict: 'A', 
    scope: { 
      dirvalue: "=" 
      }, 
    priority: 1000, 
    compile: function compile(element, attrs) { 
     element.attr('ng-model-options', '{updateOn: 'default blur', debounce:{'default': 2000, 'blur': 0}}'); 
     return { 
      pre: function preLink(scope, iElement, iAttrs, controller) { }, 
      post: function postLink(scope, iElement, iAttrs, controller) { 
      $compile(iElement)(scope); 
      } 
     }; 
    } 
+0

@nullpointer哦..我的壞。注入$編譯。看一看。 – Vivek

+0

現在工作,謝謝! – nullpointer

0

你現在應該工作是什麼,即模型中的模糊事件後,將更新3秒。

不過,若你想更新3秒default觸發以及之後,那麼你應該做

ngModelController.$options = { 
    updateOn: 'blur', 
    updateOnDefault: true, 
    debounce: { 
     'blur': 3000, 
     'default': 3000 
    } 
}; 
+0

您確定** updateOnDefault:true ** – Vivek

+0

已經試過這個,不起作用! – nullpointer

+0

你使用哪種版本的角度?你需要1.3.x或更高版本。 – potatopeelings