Кто-нибудь сможет мне помочь в этом вопросе, который у меня есть? У меня есть NavCtrl для управления моим активным тегом, я смог изменить активную вкладку, когда нажимаю на элемент меню, однако, когда я нажимаю на ссылку в виде тела, она возвращает меня на страницу, которую я хочу, но активна тег не изменяется.
//controller for nevigation menu
sp.controller('NavCtrl', ['$scope', 'auth', '$window','$rootScope', function ($scope, auth, $window,$rootScope) {
$scope.LogOut = auth.logOut;
$scope.isLoggedIn = auth.isLoggedIn;
$scope.tab = $rootScope.navTav;
$scope.toTop = function(){
$window.scrollTo(0, 0);
};
}]);
Я пытаюсь использовать $ rootScope для установки navTab, но он все еще не работает
//setting root scope
sp.run(function($rootScope) {
$rootScope.navTav = 1;
})
UI-маршрутизатор
.state('qaanswer', {
url: '/qa/{quesId}',
views: {
view50': {
templateUrl: './qa/qaanswer.html',
controller: 'QAAnswerCtrl'
},
'view60': {
templateUrl: './shareviews/activityupdates.html',
controller: 'HomeCtrl'
}
},
onEnter:['$rootScope',function($rootScope){
$rootScope.navTav = 5;
}]
Большое вам спасибо за помощь
Обновление HTML:
<body ng-controller="NavCtrl">
<!-- Desktop Menu -->
<div>
<div>
<ul>
<a href="#/home" ng-class="{active: navTab === 1}" ng-click="navTab = 1">
<li>Home</li>
</a>
<a href="#/qa" ng-class="{active: navTab === 2}" ng-click="navTab = 2">
<li>QA</li>
</a>
</ul>
</div>
</div>
<div>
<div>
<div class="row">
<div ui-view="view50"></div>
<div ui-view="view60"></div>
</div>
</div>
</div>
</body>
Вы можете упростить свою реализацию и не иметь проблем. Просто используйте переменную $ rootScope прямо в своем шаблоне вдоль ng-класса следующим образом:
<body ng-controller="NavCtrl">
<a ng-class="{red: $root.navTab===0}" ui-sref="first">first</a>
<a ng-class="{red: $root.navTab===1}" ui-sref="second">second</a>
<div ui-view></div>
</body>
Затем обновите $ rootScope в своих контроллерах.
.controller('NavCtrl', function($scope, $rootScope) {});
.controller('FirstCtrl', function($scope, $rootScope) {
$rootScope.navTab = 0;
});
.controller('SecondCtrl', function($scope, $rootScope) {
$rootScope.navTab = 1;
});
Ваши государства могут оставаться относительно простыми:
.state('first', {
url: '/first',
templateUrl: 'first.html',
controller: 'FirstCtrl'
})
.state('second', {
url: '/second',
templateUrl: 'second.html',
controller: 'SecondCtrl'
})
В идеале вы бы сделали директиву для такой задачи и не использовали $ rootScope. Простым способом сделать это является трансляция сообщения всякий раз, когда вы приземляетесь на новую страницу, а затем слушайте это событие в своей директиве tab и переводите правильную вкладку как активную.