我有一个角度应用程序,它具有以下html结构
div[class="ng-view-wrap"]
的内容取决于网址,但div[class="login-wrap"]
存在于每个网页上,由rootCtrl
处理
由$routeProvider
激活的控制器正在运行但rootCtrl
无效
正如你所看到的,我甚至在ng-controller(rootCtrl as root )和loggedIn( root .loggedIn)的表达式中使用"root"
所以范围被称为rootCtrl。
角度错误:参数'rootCtrl'不是函数,未定义
HTML:
<div class="ng-view-wrap" ng-view=""></div>
<div class="login-wrap" ng-controller="rootCtrl as root">
<div class="login">
<p class="login-status">{{"Status: " + root.loggedIn }}</a>
</div>
</div>
app.js:
var mspBoard = angular
.module('mspBoard',['ngRoute'])
.config(function($routeProvider){
$routeProvider
.when('/',
{
controller: 'boardCtrl',
templateUrl: 'js/views/board.html'
})
.when('/:project',
{
controller: 'projectCtrl',
templateUrl: 'js/views/project.html'
})
.when('/:project/:topic',
{
controller: 'topicCtrl',
templateUrl: 'js/views/topic.html'
})
.otherwise({redirectTo: '/'});
});
mspBoard.controller('rootCtrl',['$scope', function($scope){
$scope.loggedIn = true;
}]);
mspBoard.controller('boardCtrl',['$scope', function($scope){
// Do Something
}]);
mspBoard.controller('projectCtrl',['$scope', function($scope){
// Do Something
}]);
mspBoard.controller('topicCtrl',['$scope', function($scope){
// Do Something
}]);
答案 0 :(得分:0)
您在这里混合了两种语法controller
和controller as
。
在rootCtrl
添加行:
this.loggedIn = true;
如果您正在使用controller as
(这是正确的方法IMO),那么当您定义控制器this
时,将被视为控制器的范围,而无需注入{{1} }。您需要将$scope
注入控制器的唯一原因是利用事件($ broadcast,$ emit,$ on)或触发摘要循环($ digest,$ apply)。
我以示例代码为基础创建了此PLNKR作为示例。