2014-03-12 86 views
10

是否可以將HTMLElement傳遞給在控制器上配置的ng-click?將當前HTMLElement傳遞給ng-click

下面是一些示例代碼:

<div ng-controller="Controller"> 
    <ul ng-repeat="item in items"> 
     <li ng-click="handleThisElement($element)" id="{{item.id}}" >{{item.name}}</li> 
    </ul> 
</div> 

控制器:

function ($scope) { 
    $scope.items = [ 
    {name: 'Bilbo', id='Bilbo'}, 
    {name, 'Frodo', id='Frodo'}, 
    {name: 'Pippin', id='Pippin'}, 
    {name: 'Merry', id='Merry'}, 
    {name: 'Sam', id='Sam'} 
    ]; 

    $scope.handleThisElement = function (element) { 
    alert(element.id); // should alert (Bilbo || Frodo || Pippin || Merry || Sam) 
    } 

UPDATE

鴕鳥政策感到困惑,我說我希望得到的不僅是整個元素來自模型的id。

$ event.target - 不適用於某些版本的IE。

回答

14

的HTML:

<div ng-controller="Controller"> 
    <ul ng-repeat="item in items"> 
     <li ng-click="handleThisElement($event)" id="{{item.id}}" >{{item.name}}</li> 
    </ul> 
</div> 

而且JS:

function ($scope) { 
    $scope.items = [ 
    {name: 'Bilbo', id='Bilbo'}, 
    {name, 'Frodo', id='Frodo'}, 
    {name: 'Pippin', id='Pippin'}, 
    {name: 'Merry', id='Merry'}, 
    {name: 'Sam', id='Sam'} 
    ]; 

    $scope.handleThisElement = function ($event) { 
    alert($event.target.id); 
    } 
+0

有另一種形式的訪問,而不是元素的使用情況?我認爲IE 8和IE 9無法很好地處理這個屬性來獲取當前元素。 – Filipe

+0

我已閱讀文檔,但無法找到任何暗示$事件在IE8和IE9中不可注入的內容。 – CodePrimate

+0

好的,我不確定AngularJS是否通過W3C規範來標準化'$ event'。我必須測試它。 – Filipe

-1

嘗試

<div ng-controller="Controller"> 
    <ul ng-repeat="item in items"> 
    <li ng-click="handleThisElement(item)" id="{{item.id}}" >{{item.name}}</li> 
    </ul> 
</div> 

function ($scope) { 
    $scope.items = [ 
    {name : 'Bilbo', id:'Bilbo'}, 
    {name : 'Frodo', id:'Frodo'}, 
    {name : 'Pippin', id:'Pippin'}, 
    {name : 'Merry', id:'Merry'}, 
    {name : 'Sam', id:'Sam'} 
    ]; 

    $scope.handleThisElement = function (element) { 
    alert(element.id); // should alert (Bilbo || Frodo || Pippin || Merry || Sam) 
    } 
} 
0

使用$watch

$scope.$watch(function() { 
    return document.activeElement; 
}, function handler(newValue, oldValue) { 
    $scope.oldActiveElement = oldValue; 
}); 
相關問題