2014-11-03 47 views
1

我有一个角度应用程序,它具有以下HTML结构

div[class="ng-view-wrap"]内容取决于URL的,但div[class="login-wrap"]存在的每一页上,并通过rootCtrl

处理

其通过$routeProvider激活控制器被工作,但rootCtrl不工作

正如你可以看到我即使在NG-控制器(rootCtrl 作为根使用"root")以及在loggedIn(.loggedIn)的表达式中,以便将作用域引用到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

如果您尝试使用其他控制器,例如'boardCtrl',它可以工作吗? – 2014-11-03 12:58:21

+1

其他问题:ng-app的定义在哪里? – 2014-11-03 12:59:06

+0

html上的ng-app boardCtrl工作正如我所说的一个与$ routeProvider相关的控制器 – 2014-11-03 13:08:37

回答

0

你是在这里混合两种类型的语法controllercontroller as

在你rootCtrl添加一行:

this.loggedIn = true; 

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

我以您的示例代码为基础创建了这个PLNKR