2017-02-10 3 views
0

Ich sende eine Controller-Methode zu Direktive. Ich möchte Parameter frpm direvtive wie Ereignisse erhalten.angularjs Direktive pass Parameter aus Controller

DEMO

var app = angular.module("app", []); 

app.controller("outCtrl", function($scope){ 
     $scope.callOut = function(pramFromDirective){ 
     console.log(pramFromDirective); 
    } 
}) 


app.directive("myDir", function(){ 
    return { 
      restrict: "E", 
      scope: { 
       call: "&" 
     }, 
      controller: function($scope){ 
      $scope.call({message: 444}); 
     } 
    } 
}) 

Ich möchte einen Parameter outCtrl.callOut() Methode senden. Aber das tut es nicht.

Antwort

1

Sie müssen den Parameter in der Vorlage mit demselben Namen wie die Eigenschaft des Objekts hinzufügen, das Sie an $scope.call() übergeben. Da Sie es als $scope.call({message: 444}) nennen tun:

<my-dir call="callOut(message)"></my-dir> 
+0

Aber ein Entwickler, der meine Direktive verwendet, kann meinen inneren Parameternamen in dieser Studie nicht kennen. Er kann einen falschen Namen senden – barteloma

+1

Das ist in der Tat ein Problem, aber ein anderes. Kann mit Dokumentation oder Code-Konventionen gelöst werden. Angular macht es durch die Dokumentation (siehe das '$ event' -Argument von z. B. [ngClick] (https://docs.angularjs.org/api/ng/directive/ngClick) - lesen Sie den Abschnitt" Argumente "). –

0

Ihre Vorlage nicht ganz korrekt ist. Sie müssen den Parameter in Ihrer Callback-Methodenbindung mit dem Namen des Objektschlüssels übereinstimmen lassen, den Sie in Ihrer Direktivenübereinstimmung genau verwenden.

<div ng-app="app"> 
    <div ng-controller="outCtrl"> 
    <my-dir call="callOut(message)"></my-dir> 
    </div> 
</div> 

Angular führt den Parameter nicht direkt durch. Er ordnet die Objektschlüssel aus dem Aufrufparameter der Anweisungsfunktion $scope.call({ message: 444 }) Parameternamen der Methode in der Vorlage call="callout(message)" zu.

+0

Aber ein Entwickler, der meine Direktive verwendet, kann meinen inneren Parameternamen in dieser Übung nicht kennen. Er kann einen falschen Namen senden. – barteloma

Verwandte Themen