【发布时间】:2016-03-09 13:52:11
【问题描述】:
我有列表菜单项,我想在单击时添加一个类并为其他元素删除相同的类。第一次点击如何不起作用。但是再次单击同一项目将添加类(并删除现有项目的类)。我在这里做错了什么?
这里是 HTML
<ul class="nav">
<li><a class="active" ng-click="scrollTo($event,'glyphicons1')">Example</a></li>
<li><a class="" ng-click="scrollTo($event,'glyphicons2')">Alignment</a></li>
<li><a class="" ng-click="scrollTo($event,'glyphicons3')">Headers</a></li>
<li><a class="" ng-click="scrollTo($event,'glyphicons4')">Divider</a></li>
<li><a class="" ng-click="scrollTo($event,'glyphicons5')">Dinu items</a></li>
</ul>
这是脚本
$scope.scrollTo = function ($event, id) {
if ($location.hash() !== id) {
$scope.activeItem = id;
$location.hash(id);
} else {
$anchorScroll();
}
};
我要切换的类是活动的。
我有同样目的的指令,也以同样的方式行事。
自定义指令:
myApp.directive('activate', function () {
return {
restrict: 'C',
link: function (scope, element) {
element.bind("click", function (e) {
$("a").removeClass("active");
element.addClass("active");
});
}
};
});
感谢您的帮助。
编辑:
我根据答案更改了 scrollTo() 函数(完美运行)。 我需要做的更改是在调用 $location.hash() 函数之前更改变量。
【问题讨论】:
-
只需使用
ng-class即可。停止将 jQuery 用于 Angular 可以为您做的事情,因为它旨在做......使用数据模型来驱动视图 -
你错过了 scope.$digest() 或将你的代码嵌入到 scope.$apply
-
对于不返回承诺的事情使用
$.when也是没有意义的。如果你确实使用了 promises...使用内置$q而不是 jQuery
标签: angularjs angularjs-directive angularjs-routing