【发布时间】:2015-11-06 07:09:34
【问题描述】:
我正在通过开发一个项目来学习 Angularjs 和 Nodejs。 我遵循了这个tutorial 并组织了我的文件夹结构和路由配置。
问题: 我添加了一个名为 isActive 的方法来根据选项卡单击更新 ng-class。但是当我单击选项卡时,它不会调用 isActive 方法。
我的猜测是,我在 appRoutes.js 中做错了,但不知道如何解决这个问题。我可以访问 MainController 但不能访问其中的方法。
我还有一个问题,当我进入应用程序或单击主页选项卡或单击应用程序标题时,我需要激活主页选项卡。
下面是html和js代码。
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<base href="/">
<title>ets</title>
<link rel="stylesheet" type="text/css" href="libs/bootstrap/dist/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/ets.css">
</head>
<body ng-app="etsApp">
<div id="mainDiv">
<div>
<section id="header_section" class="main-title"></section>
<section id="nav_section"></section>
</div>
<section id="body_section">
<div ng-view="ng-view"></div>
</section>
<section id="footer_section" class="footer-style"></section>
</div>
<script type="text/javascript" src="libs/jquery/dist/jquery.min.js"></script>
<script type="text/javascript" src="libs/angular/angular.min.js"></script>
<script type="text/javascript" src="libs/angular-route/angular-route.min.js"></script>
<script type="text/javascript" src="js/controllers/MainCtrl.js"></script>
<script type="text/javascript" src="js/controllers/HomeCtrl.js"></script>
<script type="text/javascript" src="js/appRoutes.js"></script>
<script type="text/javascript" src="js/app.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#header_section').load('views/partials/header.html');
$('#nav_section').load('views/partials/navigation_main.html');
$('#footer_section').load('views/partials/footer.html');
});
</script>
</body>
</html>
navigation_main.html
<div>
<nav class="navbar navbar-inverse">
<ul class="nav navbar-nav">
<li ng-class="{active : isActive('/home')}" id="nav_home">
<a href="/home">Home</a>
</li>
<li ng-class="{active : isActive('/expensereporting')}" id="nav_exprep">
<a href="/expensereporting">Expense Reporting</a>
</li>
<li ng-class="{active : isActive('/remainders')}">
<a href="/remainders" id="nav_remain">Todo Remainder's</a>
</li>
<li ng-class="{active : isActive('/pdfoperations')}">
<a href="/pdfoperations" id="nav_pdf">PDF Operation's</a>
</li>
<li ng-class="{active : isActive('/imageoperations')}">
<a href="/imageoperations" id="nav_img">Image Operation's</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="#" style="margin-right: 20px; color: white;">Login/Register</a></li>
</ul>
</nav>
</div>
header.html
<div>
<header id="header" style="margin-left: 50px;">
<a href="/" style="text-decoration: none; color: black;">
<strong>eTools Store</strong>
</a>
</header>
</div>
appRoutes.js
angular.module('appRoutes', []).config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/partials/home.html',
controller: 'MainController'
})
.when('/home', {
templateUrl: 'views/partials/home.html',
controller: 'MainController'
});
$locationProvider.html5Mode(true);
}]);
app.js
angular.module('etsApp', ['ngRoute', 'appRoutes', 'HomeCtrl', 'MainCtrl']);
MainCtrl.js
angular.module('MainCtrl', []).controller('MainController', function($scope) {
console.log('Main Controller');
$scope.isActive = function(destination) {
console.log($location.path());
return destination === $location.path();
}
});
【问题讨论】:
-
可能只是语法错误? - 你需要在类名周围加上引号。
<li ng-class="{'active' : isActive('/pdfoperations')}"> -
@Tristan 我不这么认为.. 请看这个答案stackoverflow.com/a/18562339/967638
-
你能搞定这个吗?
-
这对我来说不合适。除了将同一控制器用于多条路线的不良做法外,您还尝试评估无法访问控制器的元素中的角度表达式。角度路由提供程序将控制器附加到
ng-view元素和仅在其中加载的模板,它不会使控制器“全局”可用。 -
另外,使用 JQuery
.load()注入您的部分的做法不是角度方式。
标签: javascript angularjs node.js express angular-controller