我不确定如何在Angular中实现这个功能。我想在路由更改时添加和删除CSS类。我正在尝试显示和隐藏垂直菜单。目前我正在使用ui-route。如果有任何建议或示例链接,或对我的问题的不同方法的任何其他建议,都将不胜感激。
最简便高效的方法:
angular.module(...).run(function($rootScope, $state) {
$rootScope.$state = $state;
});
<div ng-if="$state.contains('someState')">...</div>
如果菜单有大量绑定,那么删除DOM将会提高性能。
然而,我经常告诉人们要考虑利用命名视图进行导航:
<body>
<nav ui-view="nav"></nav>
<div class="container" ui-view></div>
</body>
$stateProvider.state('home', {
views: {
'nav@': {
templateUrl: 'nav.html'
}
'': {
// normal templateUrl and controller goes here.
}
}
});
最后,您也可以执行以下操作:
<nav ng-show="$state.contains('somestate')"></nav>
<nav ng-class="{someClass:$state.contains('somestate')}"></nav>
或者,您可以查看ui-sref-active
我的所有建议都假定您正在使用UI-Router,因为它是最好的!
试试这个:
app.run(function ($rootScope) {
$rootScope.$on("$stateChangeStart", function(event, toState, fromState){
if (toState.url === "/path") {
$('div').addClass('className');
} else {
$('div').removeClass('className');
}
});
});
$rootScope.$on('$routeChangeSuccess', function (event, current, previous) {
// Add your logic, for instance:
$('body').addClass('hide-menu');
});
app.controller('MainController', function ($scope) {
$scope.toggleMenu = function(isToShow) {
$scope.isVisibleMenu = isToShow == true;
};
});
然后在你的HTML中:
<!-- Menu toggle button-->
<button ng-click="toggleMenu()"></button>
<div class="toggleable-menu" ng-class="{'visible-menu': isVisibleMenu}">
<!-- The menu content-->
</div>
并且使用最简单的CSS(当然,您可以添加动画或任何其他内容来切换此菜单。)
.toggelable-menu {
display: none;
}
.toggelable-menu.visible-menu {
display: block;
}
$state
的方法。 - Sergey Romanov