我想给 <li>
添加一个类当它还是 child 的时候<a>
徘徊但我似乎无法让它工作。正在发生的事情是,无论怎样<a>
元素悬停,只有第一个 <li>
受到影响,所以我需要能够只针对父 <li>
的 <a>
目前悬停在上面。
这是我目前所拥有的:
代码如下:
Controller (Javascript)
var myApp = angular.module('myApp',[]);
myApp.controller("Ctrl", function($scope){
$scope.addClass = function(){
angular.element(document.querySelector('.li-hover')).addClass('hovering');
}
$scope.removeClass = function(){
angular.element(document.querySelector('.li-hover')).removeClass('hovering');
}
});
HTML
<div ng-app='myApp'>
<div ng-controller="Ctrl">
<ul>
<li class="li-hover" >
<a href="" ng-mouseover="addClass()" ng-mouseleave="removeClass()">
<span>Home</span>
</a>
</li>
<li class="li-hover" >
<a href="" ng-mouseover="addClass()" ng-mouseleave="removeClass()">
<span>About</span>
</a>
</li>
<li class="li-hover" >
<a href="" ng-mouseover="addClass()" ng-mouseleave="removeClass()">
<span>Contact</span>
</a>
</li>
</ul>
</div>
</div>
CSS
.hovering {
background-color: pink;
border-bottom: 5px solid red;
}
li {
margin: 1em;
padding: 2em;
border-bottom: 5px solid #aaa;
background: #ccc;
}
a {
background: white;
padding: 0.5em;
}
最佳答案
您可以使用转发器隔离作用域,并更改重复项的属性:
myApp.controller("Ctrl", function($scope) {
$scope.items = [
{
href: '',
title: 'Home',
},
{
href: '',
title: 'About',
},
{
href: '',
title: 'Contact',
}
];
});
然后,您可以在 item
上存储一个 over 属性,并使用它来更改类:
<ul>
<li ng-repeat="item in items" ng-class="{hovering: item.over}">
<a ng-href="{{item.href}}" title="{{item.title}}" ng-mouseover="item.over=true" ng-mouseleave="item.over=false">
<span>{{item.title}}</span>
</a>
</li>
</ul>
或者您现在可以为此使用一个简单的 var,因为 ng-repeat
指令将每个元素隔离在一个新的范围内:
<ul>
<li ng-repeat="item in items" ng-class="{hovering: over}">
<a ng-href="{{item.href}}" title="{{item.title}}" ng-mouseover="over=true" ng-mouseleave="over=false">
<span>{{item.title}}</span>
</a>
</li>
</ul>
我认为这样更好,因为悬停时的样式是一个 View 问题。虽然上面的解决方案在当前范围内设置了一个hover
属性,但是 Controller 不需要关心这个。
关于javascript - 如何通过 Angular 将鼠标悬停在另一个元素上时添加和删除一个元素的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28243478/