通过rootScope将变量从控制器传递到另一个控制器

时间:2016-02-17 12:33:05

标签: angularjs

我正在处理一个项目,而且我很难通过MainController将变量从NavbarController传递到rootScope

  

Angular不打印我通过$ rootScope从MainController传递到NavbarController的{{windowName}}变量。

所以这是我使用的代码:

查看:

<body>
  <nav ng-controller="NavbarController">
    <ul>
      <li>{{windowName}}</li>
    </ul>
  </nav>
  <!-- this is where i use ng-view instead of MainController -->
  <div ng-controller="MainController">
    {{name}}
  </div>
</body>

控制器:

var myApp = angular.module('myApp',[]);

function MainController($scope, $rootScope){
  $rootScope.windowName = 'Window name 95';

  $scope.name = 'Test name';
}

function NavbarController($scope, $rootScope){
  $scope.windowName = $rootScope.windowName;
}

Filddle:http://jsfiddle.net/6v0fx6d2/1/

说明:

我正在使用ngRoute,所以我简化了代码,在注释中我使用ng-view来渲染模板,因此导航栏是我正在使用的基本模板。

2 个答案:

答案 0 :(得分:0)

如果你改变你的html结构,它将起作用。

<div ng-controller="MainController">
    {{name}}
  </div>
  <nav ng-controller="NavbarController">
    <ul>
      <li>{{windowName}}</li>
    </ul>
  </nav>

在angularjs中,控制器按照它们在代码中出现的顺序执行。因此,在您的情况下,windowName未设置。因此它在NavbarController中不可用

答案 1 :(得分:0)

好的,我发现了问题。

要打印rootScope变量,您需要添加{{$ route.windowName}}。

  

此外,如果您将ExpressJS与HoganTemplate一起使用,请确保更改   Hogan小胡子括号:

     

app.locals.delimiters = '{{{ }}}';