2014-02-17 127 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''。 –