テーブル行を吐き出すディレクティブ内にリピーターがあります。
ユーザーが行をクリックすると、その行を強調表示したい。
私はうまくいくものを持っています。それを行うためのより良い方法があるかどうか疑問に思っていました:
.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 は常に子を送信するので、テーブル行に移動して行にクラスを設定します。
これを行うためのよりクリーンな方法があるかどうか、実際にAngularがこれらの状況で使用する「this」参照があり、DOMツリーを歩くのではなく呼び出すことができるかどうか疑問に思っていました。