【发布时间】:2014-02-14 10:08:19
【问题描述】:
所以我正在制作一个名为“hover”的简单指令,它是一个基本的导航菜单,当你将鼠标移到特定的 aba 上时,这个 aba 会改变颜色。查看我的脚本代码:
var app = angular.module('myModule', []);
app.directive('hover', function(){
return{
restrict: 'E',
controller: function($scope) {
$scope.hover = null;
$scope.selected = null;
$scope.onHover = function (index){
$scope.hover = index;
}
$scope.mouseLeave = function(){
if($scope.selected)
$scope.hover = $scope.selected;
else
$scope.hover = -1;
}
$scope.onClick = function(index) {
$scope.hover = index;
$scope.selected = index;
}
},
compile: function(el, attrs){
el.children().attr('data-ng-mouseover', 'onHover('+attrs.index+')');
el.children().attr('data-ng-mouseleave', 'mouseLeave()');
el.children().attr('data-ng-click', 'onClick('+attrs.index+')');
el.children().attr('data-ng-class', '{'+ attrs.onhover +': hover == ' + attrs.index + ' || selected == ' + attrs.index + '}');
}
}
});
现在是我的 html:
<ul>
<hover index="0" onhover="hover"><li>Home</li></hover>
<hover index="1" onhover="hover"><li>About Us</li></hover>
<hover index="2" onhover="hover"><li>Contact</li></hover>
<hover index="3" onhover="hover"><li>Share with us!</li></hover>
</ul>
这工作正常,但是当我以这种方式放置我的 html 时:
<ul>
<li hover index="0" onhover="hover">Home</li>
<li hover index="1" onhover="hover">About Us</li>
<li hover index="2" onhover="hover">Contact</li>
<li hover index="3" onhover="hover">Share with us!</li>
</ul>
这不起作用,我必须用“hover”标签包裹我的“li”才能使其工作(是的,我正在将限制属性更改为“A”),为什么?还有一个问题,用“hover”标签包裹我的“li”是验证我的html的坏技巧?
这是我编译的html:
<ul>
<li onhover="hover" index="0" hover="" data-ng-mouseover="onHover()">Home</li>
<li onhover="hover" index="1" hover="" data-ng-mouseover="onHover()">About Us</li>
<li onhover="hover" index="2" hover="" data-ng-mouseover="onHover()">Contact</li>
<li onhover="hover" index="3" hover="" data-ng-mouseover="onHover()">Share with us!</li>
</ul>
当我将鼠标移到这些元素上时,我的函数:“onHover”不会被调用。
【问题讨论】:
-
您将指令限制为
E类型,如Element,您需要查看其他限制类型、类、属性等。听起来您可能想要restrict: 'A' -
把
restrict: 'E',意思是“限制做元素”改成restrict: 'A',意思是“限制属性” -
对不起,我现在更新了,但是我把属性改成了“A”。
标签: angularjs angularjs-directive