1

ユーザーがディレクティブにメソッド名を与え、そのディレクティブに でそのメソッドを作成させ、そのメソッドのscope呼び出しを処理できるようにする方法はありますか?

したがって、最初にユーザーにメソッド名HELLOを定義させ、次にユーザーに別の場所から呼び出しさせHELLOます (同じスコープ内にあります)。

<div ng-controller="AppController">
    <div mydirective="" mydirective-data="MyJson" mydirective-fx="HELLO" />
    <button ng-click="HELLO()">Click me</button>
</div>

内部的には、ディレクティブは を見てHELLO、それを独自のメソッドにマップする必要があります。ディレクティブでは、渡されるメソッド名を見て、それを割り当てています

app.directive('mydirective', function() {
       return {
         restrict: 'A',
         scope: {
           data: '=mydirectiveData',
           fx: '=mydirectiveFx'
         },
         link: function(scope, element, attrs) {
             scope.fx = function () { console.log(scope.data); } ;
             }
         }
       }
    );

ご覧のとおり、コントローラーで定義された を読み取る関数に を割り当てscope.fxていますHELLOscope.data

これを試みても何も実行されず、エラーもスローされません。私はこれを間違った方法でやっているのだろうかと思います。

わかりやすくするために、plunkerを作成しました。コンソールを開くことを忘れないでください。

4

1 に答える 1

2

then@の代わりに使用して、プロパティを作成します。=scope[scope.fx]

app.directive('mydirective', function() {
   return {
     restrict: 'A',
     scope: {
       data: '=mydirectiveData',
       fx: '@mydirectiveFx'
     },
     link: function(scope, element, attrs) {
        scope[scope.fx] = function () { console.log(scope.data); };
      }
     }
   }
);

http://plnkr.co/edit/a2c14O?p=preview

于 2013-09-13T22:21:48.127 に答える