2017-02-10 9 views
0

ディレクティブにコントローラ・メソッドを送信しています。私はイベントのようにパラメータfrpm direvtiveを取得したい。angularjsディレクティブ・パス・パラメータ・アウト・コントローラ

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}); 
     } 
    } 
}) 

私はoutCtrl.callOut()メソッドにパラメータを送りたいです。しかし、それはしません。

答えて

1

テンプレートにパラメータを追加する必要があります。このパラメータは、渡すオブジェクトのプロパティと同じ名前で$scope.call()に設定します。あなたは$scope.call({message: 444})としてそれを呼んでいるので実行します。

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

しかし、私のディレクティブを使用する開発者は、このstuationの内部パラメータ名を知ることができません。彼は間違った名前を送ることができます – barteloma

+1

これは実際には問題ですが、別のものです。ドキュメントやコードの慣習で解決できます。 Angularは文書化([ngClick](https://docs.angularjs.org/api/ng/directive/ngClick)の '$ event'引数を参照 - 「引数」のセクションを参照)。 –

0

あなたのテンプレートは非常に正しいではありません。コールバックメソッドバインディングのパラメータを、ディレクティブで使用するオブジェクトキーの名前と正確に一致させる必要があります。

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

角度は、実際にはパラメータをそのまま通過しません。これは、オブジェクトキーを指令関数呼び出しパラメータ$scope.call({ message: 444 })からテンプレートcall="callout(message)"のメソッドのパラメータ名にマップします。

+0

しかし、私のディレクティブを使用している開発者は、このステートメントで内部パラメータ名を知ることができません。彼は間違った名前を送ることができます。 – barteloma

関連する問題