我在页面上使用Angular Routing,我还想突出显示与当前内容相对应的菜单项。
我尝试使用类似in this post的ngClass和控制器,但它没有效果
以下是代码:
的index.html
<body ng-app="sApp">
<div ng-controller="NavCtrl" class="nav">
<ul>
<li ng-class="{ active-btn: isActive('/')}">
<a href="#" class="menu-btn">HOME</a>
</li>
<li ng-class="{ active-btn: isActive('/1')}">
<a href="#/1" class="menu-btn">PAGE1</a>
</li>
<li ng-class="{ active-btn: isActive('/2')}">
<a href="#/2" class="menu-btn">PAGE2</a>
</li>
</ul>
</div>
<div class="content" ng-view=""></div>
的style.css
.nav {
padding: 1rem;
text-align: center;
background-color: #ffa500;
}
.nav ul li {
display: inline;
font-weight: 700;
}
.menu-btn {
padding: 1rem;
}
.menu-btn:hover {
background-color: #ee82ee;
}
.active-btn {
background-color: #00f;
}
的script.js
'use strict';
var sApp;
sApp = angular.module('sApp', ['ngRoute']);
sApp.config(function($routeProvider) {
return $routeProvider
.when('/', {templateUrl: 'h.html'})
.when('/1', {templateUrl: '1.html'})
.when('/2', {templateUrl: '2.html'})
.otherwise({redirectTo: '/'});
});
sApp.controller('NavCtrl', function($scope, $location) {
$scope.isActive = function(viewLocation) {
return viewLocation === $location.path();
};
});
以下是plunker:
看起来菜单项无法将类更改为active-btn。 你能帮帮我吗?
答案 0 :(得分:1)
您可以这样做:
<li ng-class="{active: $route.current.loadedTemplateUrl=='/1'}">
My 1 active
</li>
答案 1 :(得分:0)
<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@*" data-semver="1.3.0-beta.5" src="https://code.angularjs.org/1.3.0-beta.5/angular.js"></script>
<script data-require="angular-route@*" data-semver="1.2.20" src="https://code.angularjs.org/1.2.20/angular-route.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-app="sApp">
<div ng-controller="NavCtrl" class="nav">
<ul>
<li ng-class="classActive('/')">
<a href="#" class="menu-btn">HOME</a>
</li>
<li ng-class="classActive('/1')">
<a href="#/1" class="menu-btn">PAGE1</a>
</li>
<li ng-class="classActive('/2')">
<a href="#/2" class="menu-btn">PAGE2</a>
</li>
</ul>
</div>
<div class="content" ng-view=""></div>
</body>
</html>
以及script.js
'use strict';
var sApp;
sApp = angular.module('sApp', ['ngRoute']);
sApp.config(function($routeProvider) {
return $routeProvider
.when('/', {templateUrl: 'h.html'})
.when('/1', {templateUrl: '1.html'})
.when('/2', {templateUrl: '2.html'})
.otherwise({redirectTo: '/'});
});
sApp.controller('NavCtrl', function($scope, $location) {
$scope.isActive = function(viewLocation) {
return viewLocation === $location.path();
};
$scope.classActive = function( viewLocation ) {
if( $scope.isActive(viewLocation) ) {
return 'active-btn';
}
else {
return 'inactive-btn';
}
}
});
最好不要在html中放入过多的逻辑,让这样的函数更有意义。更有意义的是将所有菜单内容包装在一个对象中,然后迭代该对象。然后你也可以听取locationuccess,只需更改对象,而无需在点击时更改它。这样它不依赖于点击。
多数民众赞成我将如何做到这一点,逻辑可以保留在抽象服务中,并且更可重复使用。
古德勒克!