2017-02-21 4 views
0

Ich versuche, meine benutzerdefinierte Anweisung ein ngChange-Ereignis zu aktivieren, damit der ursprüngliche Controller etwas tun kann, wenn Daten in der Direktive geändert haben.Auslöser ngChange von benutzerdefinierter Anweisung

sieht meine Anweisung wie folgt aus:

.directive('spInputCheckbox', function() { 
     return { 
      scope: { 
       ngModel: '=', 
       ngChange: '&' 
      }, 
      restrict: 'AE', 
      replace: 'true', 
      template: '<div><span ng-click="model = !model"><i ng-if="model">X</i></span><input type="checkbox" ng-model="model" ng-change="change(model)" /><span ng-if="title">{{ title }}</span></div>', 
      link: function(scope, elem, attr){ 
        scope.title = attr.title 
       scope.$watch('ngModel', function(value){ 
        if(value){ 
         scope.model = scope.ngModel 
        } 
       }); 

       scope.change = function(value){ 
        scope.ngModel = scope.model 
        scope.ngChange() 
       } 
      } 
     }; 
    }) 

und hier ist, wie ich es nennen

<sp-input-checkbox ng-model="info" 
     ng-init="info = false" 
     title="click me" 
     ng-change="alert(7)" /> 

hier ein JsFiddle mit dem Code

Antwort

0

Da die Änderung ist, ein Klick-Ereignis können Sie Verwenden Sie ng-click. Eine Bereichsfunktion kann für das Ereignis ng-click aufgerufen werden.

<sp-input-checkbox ng-model="info" ng-init="info = false" title="click me" ng-click="modified()" />

$scope.modified = function(){ alert(7); };

Solution

+0

Dies würde den Alarm anzeigen. aber feuere nicht das ng-change-Ereignis, das ich suche –

+0

Yeah. Aber da es ein Kontrollkästchen ist und Klick die einzige Änderung ist, warum brauchen Sie das Ereignis ng-change? – pahan

+0

Falls es etwas anderes als eine Checkbox war, sagen Sie einen Eingangstyp = "Text" –

0

Vielleicht gerade das Modell kann tun, was Sie mögen diese

scope.$watch('model', function(value){ 
    if(value){ 
     scope.ngModel = scope.model 
     hasChange = true 
    } 

    if(hasChange) { 
      scope.change() 
    } 
}); 

sehen ganzen Code here erreichen wollen

Verwandte Themen