2016-04-05 37 views
1

私は、私のコントローラで関数が宣言されていて、この関数を呼び出せるディレクティブが必要なAngularの問題があります。ディレクティブスコープの&を使用して、親関数を参照します。2つのレベルのディレクティブの引数を持つコールコール親関数

問題は、最初の命令の中に別の指令があり、内部指令がコントローラのこの関数を参照している場合に発生します。

関数は、最初のディレクティブと2番目のディレクティブ(関数に引数がない場合)から呼び出すことができます。関数は、最初の指令から呼び出すことができ、2つ目の指令からは呼び出すことはできません(関数に引数がある場合)。

このplnkrはアクションでそれを示しています

https://plnkr.co/edit/8E5oNvWcF0QQWL7pmxrD?p=preview

これはバグですか、私は何かが足りないのですか?

答えて

3
<directive-two increment="increment()" add="add({amount : amount})"></directive-two> 

https://plnkr.co/edit/WvVcNIOJ8zKvFmchOQ5R?p=preview

+0

これは機能します。スコープの下の関数への参照をdirectiveOneからdirectiveTwoに渡すときにJSONで引数を宣言しなければならない理由はありません。これはとても冗長で、2つ以上の引数を持つメソッドがあれば、HTMLは本当に乱雑になります。 – ibanore

0

あなたが複数のオプションを持つ関数を渡している場合は、私はあなたが、関数の参照を格納し、それを呼び出し、http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-3-isolate-scope-and-function-parameters

が、私は私の好きなオプションを指定してplnkrを更新し、この記事をチェックすることをお勧めします次のように、関数名の後に括弧を追加せずに、ディレクティブの関数を参照する必要があります。

<directive-one increment="increment" add="add"></directive-one> 

そして、あなたはこのような機能を呼び出すことができます。

'<button ng-click="increment()()">Increment</button>' + 
'<button ng-click="add()(5)">Add</button>' + 

私は、このオプションはオーバーJSONオブジェクトを送信することを好むが、私はそれがきれいだと思います。 https://plnkr.co/edit/Y3OJpMfcp5R05a8uk1av?p=preview

関連する問題