AngularJS:独立于$ routeProvider的控制器正在获取ReferenceError

时间:2014-11-03 12:46:47

标签: javascript angularjs

我有一个角度应用程序,它具有以下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
}]);

1 个答案:

答案 0 :(得分:0)

您在这里混合了两种语法controllercontroller as

rootCtrl添加行:

this.loggedIn = true;

如果您正在使用controller as(这是正确的方法IMO),那么当您定义控制器this时,将被视为控制器的范围,而无需注入{{1} }。您需要将$scope注入控制器的唯一原因是利用事件($ broadcast,$ emit,$ on)或触发摘要循环($ digest,$ apply)。

我以示例代码为基础创建了此PLNKR作为示例。