Javascript AngularJS指令:将函数从控制器附加到ng click

Javascript AngularJS指令:将函数从控制器附加到ng click,javascript,angularjs,Javascript,Angularjs,我在尝试编写一个指令来生成一个通用工具提示时遇到了一些问题,该工具提示接受用户id作为参数,以及与该id关联的不同操作。每个操作在控制器中都有自己的方法和图标 这是HTML <tr ng-repeat="user in users" row-actions id="user.id" actions="[{'action': editUser ,'icon': 'edit'}, {'action': removeUser, 'icon': 'trash'}]"> <

我在尝试编写一个指令来生成一个通用工具提示时遇到了一些问题,该工具提示接受用户id作为参数,以及与该id关联的不同操作。每个操作在控制器中都有自己的方法和图标

这是HTML

<tr ng-repeat="user in users"
    row-actions id="user.id" actions="[{'action': editUser ,'icon': 'edit'}, {'action': removeUser, 'icon': 'trash'}]">
    <td>{{user.name}}</td>
    <td>{{user.unit.name}}</td>
    <td>{{user.roleName}}</td>
    <td>{{user.active ? 'ACTIVE' : 'NON_ACTIVE' | translate}}</td>
</tr>

{{user.name}
{{user.unit.name}
{{user.roleName}
{{user.active?'active':'NON_active'| translate}
这是指令

myApp.directive('rowActions',['$compile', function($compile){
      return {
        restrict: 'A',
        scope: {
          id: '=',
          actions: '='
        },
        link: function (scope, element, attr) {
          var div = angular.element('<div class="row-actions"></div>');
          for (var i=0; i < scope.actions.length; i++) {
            div.append('<span class="row-action icon icon-' + action.icon + ' icon-white" ng-click="' + action.action + '(' + scope.id + ')' + '"></span>');
          }

          element.append(div);

          $compile(element);
        }
      };
    }]);
myApp.directive('rowActions',['$compile',function($compile){
返回{
限制:“A”,
范围:{
id:“=”,
操作:'='
},
链接:功能(范围、元素、属性){
var div=角度元素(“”);
对于(var i=0;i
基本上,方法是editUser和removeUser,我希望能够以editUser(user.id)等形式调用它们,但我无法将其编译。 我尝试将它们作为字符串('editUser')发送,在示例中,它们作为函数发送。两者都不起作用

请看一看,,
谢谢

好吧,一个直接的问题是你从来没有定义过
动作
,所以
action.icon
action.action
在你的
for
循环中会给你一个错误

但是,即使您将其更改为
scope.actions[i].action
,这仍然不起作用,因为您在当前(隔离)作用域上没有
editUser
属性

相反,我认为你需要这样的东西:

for (var i=0; i < scope.actions.length; i++) {
  div.append('<span class="row-action icon icon-' 
              + scope.actions[i].icon 
              + ' icon-white" 
              + ng-click="actions['+ i + '].action(' + scope.id + ')' 
              + '"></span>');
}

好的,一个直接的问题是,您从未定义
操作
,因此
操作图标
操作
for
循环中的
操作将给您一个错误

但是,即使您将其更改为
scope.actions[i].action
,这仍然不起作用,因为您在当前(隔离)作用域上没有
editUser
属性

相反,我认为你需要这样的东西:

for (var i=0; i < scope.actions.length; i++) {
  div.append('<span class="row-action icon icon-' 
              + scope.actions[i].icon 
              + ' icon-white" 
              + ng-click="actions['+ i + '].action(' + scope.id + ')' 
              + '"></span>');
}

好的,一个直接的问题是,您从未定义
操作
,因此
操作图标
操作
for
循环中的
操作将给您一个错误

但是,即使您将其更改为
scope.actions[i].action
,这仍然不起作用,因为您在当前(隔离)作用域上没有
editUser
属性

相反,我认为你需要这样的东西:

for (var i=0; i < scope.actions.length; i++) {
  div.append('<span class="row-action icon icon-' 
              + scope.actions[i].icon 
              + ' icon-white" 
              + ng-click="actions['+ i + '].action(' + scope.id + ')' 
              + '"></span>');
}

好的,一个直接的问题是,您从未定义
操作
,因此
操作图标
操作
for
循环中的
操作将给您一个错误

但是,即使您将其更改为
scope.actions[i].action
,这仍然不起作用,因为您在当前(隔离)作用域上没有
editUser
属性

相反,我认为你需要这样的东西:

for (var i=0; i < scope.actions.length; i++) {
  div.append('<span class="row-action icon icon-' 
              + scope.actions[i].icon 
              + ' icon-white" 
              + ng-click="actions['+ i + '].action(' + scope.id + ')' 
              + '"></span>');
}

以字符串形式接收操作。将此
操作:'='
更改为
操作:'@'
。如果这不起作用,请将PlunkReceive操作设置为字符串。将此
操作:'='
更改为
操作:'@'
。如果这不起作用,请将PlunkReceive操作设置为字符串。将此
操作:'='
更改为
操作:'@'
。如果这不起作用,请将PlunkReceive操作设置为字符串。将此
操作:'='
更改为
操作:'@'
。如果这不起作用,请设置一个劫掠器非常感谢您的回答。现在我将检查第一个方法,但是我发现使用第二个方法,我无法按照我的要求将模板附加到现有元素(请注意,它是通过属性使用的)。我的用例是在hover上显示。非常感谢您的回答。现在我将检查第一个方法,但是我发现使用第二个方法,我无法按照我的要求将模板附加到现有元素(请注意,它是通过属性使用的)。我的用例是在hover上显示。非常感谢您的回答。现在我将检查第一个方法,但是我发现使用第二个方法,我无法按照我的要求将模板附加到现有元素(请注意,它是通过属性使用的)。我的用例是在hover上显示。非常感谢您的回答。现在我将检查第一个方法,但是我发现使用第二个方法,我无法按照我的要求将模板附加到现有元素(请注意,它是通过属性使用的)。我的用例是在悬停时显示。