2016-04-24 3 views
2

Ich möchte diese Option hinzufügen, wenn meine Direktive kompiliert wird.Gibt es eine Möglichkeit, ng-Modell-Optionen mithilfe von Direktiven dynamisch hinzuzufügen?

Ich habe mit diesem Versuch:

HTML

<input ng-model="myValue" my-directive> 

JS

angular 
    .module('myApp') 
    .directive('myDirective', directive); 

directive.$inject = ['$compile']; 
function directive($compile){ 
    var ddo = { 
    restrict: 'A', 
    require: 'ngModel', 
    link: {pre: prelinkFn} 
    }; 
return ddo; 

function prelinkFn(scope, element, attrs){ 

    attr['ngModelOptions'] = { updateOn: 'blur' }; 

    //I think that in this function, when i compile the element, the attributes 
    //are compiled too, but this is not working 
    $compile(element)(scope); 
} 
} 

Meine Fragen:

  1. Was habe ich falsch gemacht?
  2. Es gibt andere Möglichkeiten, die "Unschärfe" -Option für die ng-Modell-Zuweisung zu binden?
+0

Sie die Optionen Objekt zu Umfang binden kann und einen Verweis auf das Objekt liefern in 'ng-Modell-options' – svarog

+0

Meine Idee es ist das Hinzufügen dinamically' ng-Modell -options' Richtlinie, nicht dynamisch die Objektoption hinzufügen. –

+0

warum? macht es einen Unterschied? Sie erhalten das Standardverhalten für ein leeres Objekt – svarog

Antwort

3

sollten Sie ngModelCtrl.$options verwenden:

app.directive("myDirective", function($compile){ 
    return { 
     require: 'ngModel', 
     link: function(scope, iElem, iAttrs, ngModelCtrl) { 
      ngModelCtrl.$options = { 
       updateOn: 'blur', 
       updateOnDefault: true, 
       debounce: { 
        'blur': 1000, 
        'default': 1000 
       } 
      } 
      // Then do what you want... :) 
     } 
    } 
});