2013-04-26 33 views
3

HTML視圖與指令:如何將變量中的可執行動作(&)傳遞給指令?

<div click aaa="aaa()" action="action"></div> 

控制器:我喜歡在$ scope.action傳遞函數BBB():

app.controller('MainCtrl', function($scope) { 
    $scope.aaa = function() { alert('aaa'); } 
    $scope.bbb = function() { alert('bbb'); } 

    $scope.action = 'bbb()'; 
}); 

指令:

app.directive('click', function() { 
    return { 
     scope: { 
      aaa: '&', 
      action: '&' 
     }, 
     template: 
      '<button ng-click="aaa()">show aaa (work ok)</button>' + 
      '<button ng-click="action">show bbb (not work)</button>' + 
      '<br>How to pass ng-click action in variable into directive?' 
    } 
}); 

我不知道如何評估action將被替換爲bbb()

這裏是plunker:http://plnkr.co/edit/d8DtsNARKPPJwk2SO2WJ

回答

5

$scope.action必須是一個指針$scope.bbb,而不只是一個字符串,它指的是它鬆散。控制器中的"bbb()意味着什麼,而$scope.bbb()是您創建和需要使用的。當你使用HTML時,暗示$scope,這就是爲什麼你可以簡單地寫aaa()

在您的模板和HTML中,您還需要撥打action,就像您撥打aaa一樣。

http://jsfiddle.net/DFcJf/

HTML

<div ng-app="app" ng-controller="MainCtrl"> 
    <div click aaa="aaa()" action="action()"></div> 

</div> 

的JavaScript

var app = angular.module('app', []); 

app.directive('click', function() { 
    return { 
     scope: { 
      aaa: '&', 
      action: '&' 
     }, 
     template: 
      '<button ng-click="aaa()">show aaa (work ok)</button>' + 
      '<button ng-click="action()">show bbb (not work)</button>' + 
      '<br>How to pass ng-click action in variable into directive?' 
    } 
}); 
app.controller('MainCtrl', function($scope) { 
    $scope.aaa = function() { alert('aaa'); } 
    $scope.bbb = function() { alert('bbb'); } 

    $scope.action = $scope.bbb; 
});