У меня есть простой список для моего навигатора, и я использую ng-click и ng-blur, чтобы изменить выбранный параметр в списке. К сожалению, для этого требуется двойной щелчок, и я не могу объяснить, почему.
[1]: http://i.stack.imgur.com/6XpP9.png
[]: https://jsfiddle.net/9adtb3rt/1/
JS:
angular.module("myApp", [])
.controller("navCtrl", function(){
});
HTML:
<body ng-app="myApp">
<div class="navbar" ng-controller="navCtrl">
<ul>
<div ng-repeat="e in ['about', 'offers', 'requests']" ng-init="selected = false" class="{{e}}">
<a href="#{{e}}" ng-blur="selected=false" ng-click="selected = !selected">
<li ng-class="{'selected': selected}">{{selected}}</li>
</a>
</div>
</ul>
</div>
</body>
Я нашел решение самостоятельно, есть другой div, который я упоминаю в href в navbar, который имеет тот же идентификатор, что и класс элемента в списке. Я заметил, что если я удалю идентификатор из divs, ng-click отлично работает. Спасибо за ваше время.
HTML:
<ul>
<div ng-repeat="e in ['about', 'offers', 'requests']" ng-init="selected = false">
<a href="" ng-blur="selected=false" ng-click="selected = !selected; moveTo(e)">
<li ng-class="{'selected': selected}">{{e | uppercase}}</li>
</a>
</div>
</ul>
JS:
$scope.moveTo = function(e){
var target = $("."+e);
if(e === "about"){
$('html, body').animate({
scrollTop: 0
}, 1000);
}else{
$('html, body').animate({
scrollTop: target.offset().top
}, 1000);
}
};