Angular 指令:将 'mouseover' 事件绑定到元素
Angular Directive: bind 'mouseover' event to an element
在我的控制器中,我有以下用户数组,将在部分 html 模板中通过迭代显示
在控制器中:
vm.users = [
{"username": "johnDoe", "address": "Saltlake City, UT", "age": 34},
{"username": "janeDoe", "address": "Denver, CO", "age": 33},
{"username": "patrickDoe", "address": "San Francisco, CA", "age": 35}
];
部分html代码:
<div ng-repeat="user in mapView.users">
<my-customer info="user"></my-customer></div>
我的客户指令:
我希望在客户发生鼠标悬停事件时增加客户的年龄。是否可以在指令中执行此操作?
angular
.module('angularApp')
.directive('myCustomer', function() {
return {
restrict: 'E',
link: function(scope, element) {
element.bind('mouseover', function(e) {
e.target.age++; // this is not working, need help here!
console.log(e.target, 'mouseover');
});
},
scope: {
customerInfo: '=info'
},
templateUrl: 'views/directives/myCustomer.html'
};
}); //myCustomer
我的客户模板:
<span>
<label class="label-success">Username: {{customerInfo.username}}</label>
</span>
<span>
<label class="label-default">{{customerInfo.address}}</label>
</span>
<span>
<label class="label-danger">{{customerInfo.age}}</label>
</span>
e.target
是您鼠标悬停的 HTML 元素。请改用真实用户信息:
element.bind('mouseover', function(e) {
scope.customerInfo.age++;
});
或者,您可以使用内置 ng-mouseover
指令在 HTML 中执行所有操作。在 views/directives/myCustomer.html:
<div ng-mouseover="customerInfo.age++"> ... content of the template </div>
注意:您可能希望 ng-mouseenter 不在鼠标经过的每个像素上触发事件,而是在您使用鼠标进入区域时触发事件。
更多"Angular"的处理方式是使用ng-mouseover
您可以将其放在 "partial html" 视图中
<my-customer
info="user"
ng-mouseover="user.age = user.age + 1;"></my-customer>
ng-mouseover
计算 Angular 上下文中的表达式。这确保一切都在 Angular 上下文中,您永远不必担心手动触发摘要。
https://docs.angularjs.org/api/ng/directive/ngMouseover
根据@floriban
您也可以将它放在指令模板本身中
<div ng-mouseover="customerInfo.age = customerInfo.age + 1;">
<span>
<label class="label-success">Username: {{customerInfo.username}}</label>
</span>
<span>
<label class="label-default">{{customerInfo.address}}</label>
</span>
<span>
<label class="label-danger">{{customerInfo.age}}</label>
</span>
</div>
在我的控制器中,我有以下用户数组,将在部分 html 模板中通过迭代显示
在控制器中:
vm.users = [
{"username": "johnDoe", "address": "Saltlake City, UT", "age": 34},
{"username": "janeDoe", "address": "Denver, CO", "age": 33},
{"username": "patrickDoe", "address": "San Francisco, CA", "age": 35}
];
部分html代码:
<div ng-repeat="user in mapView.users">
<my-customer info="user"></my-customer></div>
我的客户指令: 我希望在客户发生鼠标悬停事件时增加客户的年龄。是否可以在指令中执行此操作?
angular
.module('angularApp')
.directive('myCustomer', function() {
return {
restrict: 'E',
link: function(scope, element) {
element.bind('mouseover', function(e) {
e.target.age++; // this is not working, need help here!
console.log(e.target, 'mouseover');
});
},
scope: {
customerInfo: '=info'
},
templateUrl: 'views/directives/myCustomer.html'
};
}); //myCustomer
我的客户模板:
<span>
<label class="label-success">Username: {{customerInfo.username}}</label>
</span>
<span>
<label class="label-default">{{customerInfo.address}}</label>
</span>
<span>
<label class="label-danger">{{customerInfo.age}}</label>
</span>
e.target
是您鼠标悬停的 HTML 元素。请改用真实用户信息:
element.bind('mouseover', function(e) {
scope.customerInfo.age++;
});
或者,您可以使用内置 ng-mouseover
指令在 HTML 中执行所有操作。在 views/directives/myCustomer.html:
<div ng-mouseover="customerInfo.age++"> ... content of the template </div>
注意:您可能希望 ng-mouseenter 不在鼠标经过的每个像素上触发事件,而是在您使用鼠标进入区域时触发事件。
更多"Angular"的处理方式是使用ng-mouseover
您可以将其放在 "partial html" 视图中
<my-customer
info="user"
ng-mouseover="user.age = user.age + 1;"></my-customer>
ng-mouseover
计算 Angular 上下文中的表达式。这确保一切都在 Angular 上下文中,您永远不必担心手动触发摘要。
https://docs.angularjs.org/api/ng/directive/ngMouseover
根据@floriban
您也可以将它放在指令模板本身中
<div ng-mouseover="customerInfo.age = customerInfo.age + 1;">
<span>
<label class="label-success">Username: {{customerInfo.username}}</label>
</span>
<span>
<label class="label-default">{{customerInfo.address}}</label>
</span>
<span>
<label class="label-danger">{{customerInfo.age}}</label>
</span>
</div>