2014-02-17 54 views
1

jsfiddle调用父控制器的指令,从在角

功能我有一个名为ball指令中的NG-点击。我正在尝试拨打MainCtrl的功能test()并提醒球的值为ng-repeat's alignment。 为什么不能识别MainCtrl的测试函数? var $ scope; var app = angular.module('miniapp',[]);

app.controller('MainCtrl', function($scope) { 
    $scope.project = {"name":"sup"}; 

    $scope.test = function(value) { 
     alert(value); 
    } 
    $scope.test2 = function(value) { 
     alert('yo'+value); 
    } 

}).directive('ball', function() { 
     return { 
      restrict:'E', 
      scope: { 
       'test': '&test' 
      }, 
      template: '<div class="alignment-box" ng-repeat="alignment in [0,1,2,3,4]" ng-click="test(alignment)" val="{{alignment}}">{{alignment}}</div>' 

     }; 
    }); 

HTML

<div ng-app="miniapp"> 
    <div ng-controller="MainCtrl"> 
     {{project}} 
     <ball></ball> 
    </div> 
</div> 

回答

2

您需要通过0123从控制器到指令方法...

<div ng-app="miniapp"> 
    <div ng-controller="MainCtrl"> 
     {{project}} 
     <ball test="test"></ball> 
    </div> 
</div> 

变化&=的指令:

scope: { 
    'test': '=test' 
} 

小提琴:http://jsfiddle.net/89AYX/49/

1

的一个方法是不隔离指令范围......刚刚从指令中删除范围的对象。

另一种方法是,无论你需要它,实现一个角度的服务,并把常用的方法有,注入该服务的指令通话功能,这将是洞察隔离范围,有呼叫从指令功能

1

你只需要设置控制器在你的指令为: 控制器:“MainCtrl”

所以你的指令代码应该是这样的:

return { 
    restrict:'E', 
    scope: { 
     'test': '&test' 
    }, 
    template: '<div class="alignment-box" ng-repeat="alignment in [0,1,2,3,4]" ng-click="test(alignment)" val="{{alignment}}">{{alignment}}</div>', 
    controller: 'MainCtrl' 

}; 
+0

这工作,但它情侣指令控制器。如果直接引用控制器,也应该从隔离范围中移除''test':'&test''。 –