2015-07-20 118 views
2

所以我知道在指令中定義範圍時,'@'表示字符串,'='表示雙向綁定。 '&'是什麼意思?AngularJS - 自定義指令範圍「&」do?

這裏將是一個例子指令:

angular.module('NoteWrangler') 
.directive('nwCard', function() { 
    return { 
    restrict: 'E', 
    templateUrl: './templates/directives/nw-card.html', 
    scope: { 
     header: '@', 
     description: '=', 
     tweeted: '=' 
    }, 
    link: function(scope, element, attrs){ 
     if(scope.tweeted) 
     element.addClass('tweeted'); 
    } 
    }; 
}); 
+2

http://stackoverflow.com/questions/14908133/what-is-the-difference-between-vs-and-in-angularjs –

回答

2

簡單的講,&處於functionhandler傳遞給一個指令。一個好的起點是AngularJS Developer Guide

這是一個非常簡單的例子(JSFiddle):

angular.module('Joy', []) 
    .controller('MyCtrl', ['$scope', function ($scope) { 
     $scope.addition = function (v1, v2) { 
      console.log(v1, v2); 
      return v1 + v2; 
     }; 
}]) 
    .directive('passMeContrller', [function() { 
    return { 
     restrict: 'A', 
     scope: { 
      add: '&', 
     }, 
     template: '<div>{{ add({v1: 2, v2: 4}) }}</div>' 
    }; 
}]); 

HTML是:

<div ng-app="Joy" ng-controller="MyCtrl"> 
    <div pass-me-contrller add="addition(v1, v2)"></div> 
    <hr> 
</div> 

請注意,在指令模板,函數的參數應該是{v1: 2, v2: 4}。它是一個對象,它將被Angular解碼並傳遞給控制器​​addition函數。

供您參考:Pass callback function to directive

+0

我是一個有點困惑「 {v1:2,v2:4}'。這只是設置輸出的默認值?當我做「模板:'

{{ add() }}
'」該指令似乎運行良好,如果我去「
」與實數 – HelpMeStackOverflowMyOnlyHope

+0

是的,你是對的。這裏'{v1:2,v2:4}'對應於函數'addition'的兩個參數。當然'加法(1,2)'運行良好,但在這種情況下,指令和外部控制器之間沒有交互作用。這裏的例子顯示你可以在**指令內傳遞參數**。 – Joy

+0

好的。非常感謝你的澄清。因此,在我的指令中,我可以有一個單獨的控制器,它可以計算某些內容並將其添加到隔離範圍指令中,然後將其傳遞給由父級傳入的函數。這是其他人的例子:http://jsfiddle.net/9L07epkv/5/ – HelpMeStackOverflowMyOnlyHope