Angularjs - 使用 $scope 变量更改菜单栏状态,link 由 ngRoute 管理
Angularjs - using a $scope variabile to change menubar status, link managed by ngRoute
我正在尝试使用根据 link 改变的 scopa 变量来更改菜单栏的状态,但我无法捕捉到其中的错误,因为它不起作用。
菜单栏:
<body ng-app="publicApp">
......
<ul class="nav" ng-controller="LocationController">
<li ng-class="{'active': activeURL == 'home', 'gray': activeURL != 'home'}" >
<a href="<c:url value="#/"/>"
title='<spring:message code="header.home"/>'>
<p><spring:message code="header.home"/></p>
</a>
</li>
<li ng-class="{'gray': activeURL == 'contacts', '': activeURL != 'contacts'}">
<a title='<spring:message code="header.contacts"/>' href="<c:url value='#/contacts'/>">
<p><spring:message code="header.contacts"/></p>
</a>
</li>
<li ng-class="{'gray': activeURL == 'register', '': activeURL != 'register'}">
<a title='<spring:message code="header.register"/>' href="<c:url value='#/newUser'/>">
<p><spring:message code="header.register"/></p>
</a>
</li>
</ul>
......
<div class="jumbotron" style="padding: 50px">
<div ng-view>
</div>
</div>
.....
</body>
然后app.js
var publicApp = angular.module('publicApp', ['ngRoute']);
publicApp.controller("LocationController", function($scope, $location) {
if($location.$$absUrl.lastIndexOf('/newUser') > 0){
$scope.activeURL = 'register';
} else if($location.$$absUrl.lastIndexOf('/contacts') > 0){
$scope.activeURL = 'home';
}else{
$scope.activeURL = 'home';
}
});
publicApp.config(function ($routeProvider) {
$routeProvider.when('/',
{ templateUrl: 'login'});
$routeProvider.when('/newUser',
{ templateUrl: 'newUser', controller : 'LocationController'});
$routeProvider.otherwise({ redirectTo: '/' });
});
我希望当用户按下其中的 link 时,菜单栏的布局会发生变化。
发现问题,这是一个范围问题。
找到解决方案 here.
我这样修改代码:
var publicApp = angular.module('publicApp', ['ngRoute']);
publicApp.controller("LocationController", function($scope, $location) {
if($location.$$absUrl.lastIndexOf('/newUser') > 0){
$scope.$parent.activeURL = 'register';
} else if($location.$$absUrl.lastIndexOf('/contacts') > 0){
$scope.$parent.activeURL = 'home';
}else{
$scope.$parent.activeURL = 'home';
}
});
publicApp.config(function ($routeProvider) {
$routeProvider.when('/', { templateUrl: 'login', controller : 'LocationController' });
$routeProvider.when('/newUser', { templateUrl: 'newUser', controller : 'LocationController' });
$routeProvider.otherwise({ redirectTo: '/', controller : 'LocationController' });
});
不优雅但工作。
控制器是嵌套的,然后我需要调用 $scope.$parent 来设置全局 activeURL 变量。
我正在尝试使用根据 link 改变的 scopa 变量来更改菜单栏的状态,但我无法捕捉到其中的错误,因为它不起作用。
菜单栏:
<body ng-app="publicApp">
......
<ul class="nav" ng-controller="LocationController">
<li ng-class="{'active': activeURL == 'home', 'gray': activeURL != 'home'}" >
<a href="<c:url value="#/"/>"
title='<spring:message code="header.home"/>'>
<p><spring:message code="header.home"/></p>
</a>
</li>
<li ng-class="{'gray': activeURL == 'contacts', '': activeURL != 'contacts'}">
<a title='<spring:message code="header.contacts"/>' href="<c:url value='#/contacts'/>">
<p><spring:message code="header.contacts"/></p>
</a>
</li>
<li ng-class="{'gray': activeURL == 'register', '': activeURL != 'register'}">
<a title='<spring:message code="header.register"/>' href="<c:url value='#/newUser'/>">
<p><spring:message code="header.register"/></p>
</a>
</li>
</ul>
......
<div class="jumbotron" style="padding: 50px">
<div ng-view>
</div>
</div>
.....
</body>
然后app.js
var publicApp = angular.module('publicApp', ['ngRoute']);
publicApp.controller("LocationController", function($scope, $location) {
if($location.$$absUrl.lastIndexOf('/newUser') > 0){
$scope.activeURL = 'register';
} else if($location.$$absUrl.lastIndexOf('/contacts') > 0){
$scope.activeURL = 'home';
}else{
$scope.activeURL = 'home';
}
});
publicApp.config(function ($routeProvider) {
$routeProvider.when('/',
{ templateUrl: 'login'});
$routeProvider.when('/newUser',
{ templateUrl: 'newUser', controller : 'LocationController'});
$routeProvider.otherwise({ redirectTo: '/' });
});
我希望当用户按下其中的 link 时,菜单栏的布局会发生变化。
发现问题,这是一个范围问题。 找到解决方案 here.
我这样修改代码:
var publicApp = angular.module('publicApp', ['ngRoute']);
publicApp.controller("LocationController", function($scope, $location) {
if($location.$$absUrl.lastIndexOf('/newUser') > 0){
$scope.$parent.activeURL = 'register';
} else if($location.$$absUrl.lastIndexOf('/contacts') > 0){
$scope.$parent.activeURL = 'home';
}else{
$scope.$parent.activeURL = 'home';
}
});
publicApp.config(function ($routeProvider) {
$routeProvider.when('/', { templateUrl: 'login', controller : 'LocationController' });
$routeProvider.when('/newUser', { templateUrl: 'newUser', controller : 'LocationController' });
$routeProvider.otherwise({ redirectTo: '/', controller : 'LocationController' });
});
不优雅但工作。 控制器是嵌套的,然后我需要调用 $scope.$parent 来设置全局 activeURL 变量。