2013-04-16 42 views
8

看起來很簡單,但我無法從我的指令中獲取$ event。當testcb-click被調用時,$event未定義,但在指令外(通過html),它是事件對象。

如果我使用鏈接功能(不包括在我的小提琴中),我可以得到$event,但我不能$ parse/$ eval它反對正確的範圍。

http://jsfiddle.net/langdonx/KgcGY/

<div ng-app="app" ng-controller="x"> 
    <!-- via directive --> 
    <checkbox cb-model="y" cb-click="test($event, b)"></checkbox> 
    <!-- via html --> 
    <div><input id="c2" type="checkbox" ng-model="x" ng-click="test($event, 'a')"> <label for="c2">{{x}}</label></div> 
</div> 

-

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

app.directive('checkbox', function ($parse) { 
    return { 
     restrict: 'E', 
     replace: true, 
     scope: { 
      cbModel: '=', 
      cbClick: '&' 
     }, 
     template: '<div><input id="c1" type="checkbox" ng-model="cbModel" ng-click="cbClick($event, \'a\')"> <label for="c1">{{cbModel}}</label></div>' 
    }; 
}); 

app.controller('x', function x($scope) { 
    $scope.x = true; 
    $scope.y = true; 
    $scope.test = function (ev, b) { 
     console.log('test called, ev is', ev, 'b is', b); 
     return 'xyz'; 
    } 
}); 

回答

10

您需要使用您的指令,這裏面的語法:

ng-click="cbClick({ev: $event, b:\'a\'}) 

有了這個HTML:

cb-click="test(ev, b)" 

Fiddle

directives page,節「指令定義對象」:

通常它是希望通過表達和到母體範圍從分離的範圍傳遞數據,這可以通過使完成將局部變量名稱和值映射到表達式包裝函數fn中。例如,如果表達式爲increment(amount)那麼我們就可以通過調用localFn作爲localFn({amount: 22})

+0

HERP指定的金額值,我應該閱讀文檔更多。謝謝! – Langdon

+4

@Langdon,雖然在文檔中的工作示例會更有幫助。很多人想念這個。 (我前幾次讀它時肯定沒有得到它。)我包含了文檔參考,以便人們可以在文檔中看到它(簡要地)提到的位置。 –

+1

你的意思是它在文檔中* *的位置!幾周前看到它,但它現在消失了。 SO萬歲。 –