如何在嵌套指令中访问范围?

时间:2016-02-27 23:32:09

标签: javascript angularjs

我有一个嵌套指令,从嵌套指令我试图将一个函数传递给我的控制器......函数没有被触发。

这是我的主要指令html

<div class="panel panel-primary">
  <div class="panel-heading" ng-click="collapse()">{{user.name}}</div>
  <div class="panel-body" ng-hide="collapsed">
    <address></address>
    <div>
      <h4>Friends:</h4>
      <div ng-repeat="friend in user.friends">
        {{friend}}
        <remove-friend method="removeFri(friend)"></remove-friend>
      </div>
      <div ng-show="!!user.rank">
        {{user.rank}}
      </div>
      <button ng-show="!user.rank"  class="btn btn-primary" ng-click="knightme(user)">Click Me</button>
    </div>
  </div>
</div>

在上面的指令中,我有一个remove-friend指令,它有一个名为method和function的属性,引用我的控制器函数removeFri()

在我的指令中,我这样引用它......

 .directive("removeFriend", function(){
      return {
        restrict: 'E',
        templateUrl: "removeFriend.html",
        scope : {
          method: "&"
        },
        controller: function($scope){
          $scope.remove = function(){
            $scope.method();
          };
        }
      };
  });
永远不会调用$ scope.method(),尝试发出警报($ scope.method())返回undefined。下面是点击x(删除图标)的plunker,我需要删除特定项目。

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

1 个答案:

答案 0 :(得分:2)

userInfoCard指令也有一个独立的范围,因为你没有从控制器传递它的功能,所以它是未定义的。您需要使用=绑定将其添加到范围内(因为您还不知道参数,然后它将起作用:

HTML:

<user-info-card user="user" collapse="true" remove-fri="removeFri"></user-info-card>

指令:

scope: {
    user: '=',
    removeFri: '=',
    initiallyCollapsed: '@collapse'
},

Plnkr