我在吐出表格行的指令中有一个中继器。
当用户单击一行时,我想突出显示该行。
我有一些有用的东西,我只是想知道是否有更好的方法:
.directive('userList', function(){
return{
restrict: 'A',
template: '<table>'+
'<tr>'+
'<th>User Name</th>'+
'<th>First Name</th>'+
'<th>Last Name</th>'+
'<th>Email Address</th>'+
'</tr>'+
'<tr ng-repeat="user in users" ng-click="selectUser(user,$event)" ng-mouseenter="overUser($event)" ng-mouseleave="leaveUser($event)">'+
'<td ng-click="selectUser(user)">{{user.UserName}}</td>'+
'<td>{{user.FirstName}}</td>'+
'<td>{{user.LastName}}</td>'+
'<td>{{user.Email}}</td>'+
'</tr>'+
'</table>',
scope:{
selectedUser: '=',
users: '='
},
link: function (scope, elem, attrs){
scope.selectUser = function(user,event){
$("div[user-list] tr.ts-li-selected").removeClass("ts-li-selected");
$(event.target).closest("tr").addClass("ts-li-selected");
scope.selectedUser=user;
};
scope.overUser = function(event){
$("div[user-list] tr.ts-li-over").removeClass("ts-li-over");
$(event.target).closest("tr").addClass("ts-li-over");
};
scope.leaveUser = function(event){
$("div[user-list] tr.ts-li-over").removeClass("ts-li-over");
};
}
}
});
我注意到this
似乎没有像我在直接的 java 或 jQuery 中那样引用引发事件的元素。而不是那样,我已经将事件发送到我的函数,event.target 总是发送孩子,所以我去表行设置行上的类。
我想知道是否有一种......更清洁的方式来执行此操作,如果实际上有一个“this”引用,Angular 将在这些情况下使用我可以调用而不是遍历 DOM 树。