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应该是 分配给控制器中定义的HELLO应该读取的函数。scope.data

尝试这样做不会做任何事情,也不会引发错误。这让我想知道我是否以错误的方式这样做。

为了清楚起见,我创建了一个plunker。记得打开控制台。

4

1 回答 1

2

使用@而不是=thenscope[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 回答