2016-05-13 10 views
1

Ich habe eine Winkel Richtlinie:Wie ruft man eine Direktive mit dem Elementnamen auf?

app.directive('myDirective', function() 
{ 
    return{ 
    restrict: 'AE', 
    scope: { 
     myCustomer: "&" 
    }, 
    require: 'ngModel', 
    link: function(scope, element, attr, ngModel){ 
     var oldVal; 
     function fromUser(value){ 
      scope.myCustomer()(value, oldVal); 
      oldVal = value; 
      return value; 
     } 

     function toUser(value){ 
      return value; 
     } 

     ngModel.$parsers.push(fromUser); 

     ngModel.$formatters.push(toUser); 
    } 
    } 
} 

Im Moment habe ich diese Direktor aufrufen, indem Sie Attributnamen verwenden und es an eine Funktion binden:

<input type="text" my-directive="showInput" ng-model="user.name"> 

Es funktioniert gut, aber was ich will, ist zu verwenden, Elementname, so etwas wie diese:

<my-directive> 

Das Problem ist, ich weiß nicht, wie man eine Funktion binden, wie ich mit den Attributen tun.

+0

Was meinst du mit "eine Funktion"? Sie sollten in der Lage sein, die Direktive als Element zu verwenden –

+0

https://egghead.io/lessons/angularjs-first-directive – Izuel

+0

Ich bearbeitete meinen Code, um besser zu verstehen. Ich benutze Parser und Formatierer, um auf Datenänderungen zu achten ... Und wenn Daten aktualisiert werden, wird eine Funktion ausgeführt, in diesem Fall die Funktion showInput. Und ich möchte die my-directive = "showInput" schreiben mit DOM-Element – Octtavius

Antwort

3

Sie haben beschränken weitergeben müssen: 'E' in der Direktive Optionen

angular.module("image-management") 
    .directive('myDirective', ($modal) => { 

     return { 
      restrict: 'E', 
      scope:{ 
       showInput: '&' 
      }, 
      template: '', 
      link: function(){} 
}) 

    <my-directive showInput="showInput" ></my-directive> 
+0

Und wie diese Anweisung in HTML mit Elementen und nicht mit Attributen aufgerufen wird. Jetzt habe ich my-directive = "show input", möchte aber so etwas wie mit einer Funktion haben – Octtavius

+0

Ich habe meine Antwort aktualisiert. Bitte überprüfen Sie, wie diese Anweisung in html aufgerufen wird – sumair

4

Sie müssen 'beschränken' auf 'E' in der Richtlinie Definition etwas setzen wie:

 bindToController: true, 
     controller: 'YourController', 
     controllerAs: 'vm', 
     restrict: 'E', //<----this is what you want 
     templateUrl: 'template.html' 
+0

Und wie Sie diese Anweisung in HTML mit Elementen und nicht Attribute aufrufen. Jetzt habe ich my-directive = "show input" aber möchte so etwas wie mit einer Funktion haben – Octtavius

1

<my-directive some-function="someFunction"></my-directive>

Dann in Ihrer Richtlinie link Funktion ist es accesible durch attr

link: function(scope, element, attr, ngModel){ 
    // Your logic... 
    attr.someFunction(); 
} 
1

Als @sumair beantwortet, können Sie tun:

<my-directive showInput="showInput" ></my-directive> 

Aber, wenn Sie wirklich nur

<my-directive> 

UND Ihre Richtlinie verwenden möchten, benötigt keine isolierten Umfang haben sollen, Sie können nur die Eigenschaft scope der Direktivitätsdefinition belassen und die Funktion showInput direkt aus dem geerbten Bereich referenzieren, wie in diesem Beispiel:

app.directive('myDirective', function() 
{ 
    return{ 
    restrict: 'AE', 
    /*scope: { ////// remove this part ////// 
     myCustomer: "&" 
    },*/ 
    require: 'ngModel', 
    link: function(scope, element, attr, ngModel){ 
     var oldVal; 
     function fromUser(value){ 
      scope.showInput()(value, oldVal); 
      oldVal = value; 
      return value; 
     } 

     function toUser(value){ 
      return value; 
     } 

     ngModel.$parsers.push(fromUser); 

     ngModel.$formatters.push(toUser); 
    } 
    } 
} 
Verwandte Themen