2016-02-17 3 views
0

im работая над проектом, и мне трудно передать переменную от MainController до NavbarController, через rootScope.Передайте переменную от контроллера к другому контроллеру через rootScope

Угловой не печатает переменную {{windowName}}, которую я передаю из MainController в NavbarController через $ rootScope.

Так что это код, который им с помощью:

Вид:

<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 для визуализации шаблонов, поэтому navbar - это базовый шаблон, который я использую.

+0

Вся информация о $ scope.apply находится [здесь] (HTTP: //jimhoskins.com/2012/12/17/angularjs-and-apply.html) – Matheno

ответ

0

Если вы измените структуру html, она будет работать.

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

В angularjs контроллеры выполняются в порядке их появления в code.So в вашем случае WindowName не установлен. Поэтому он недоступен в NavbarController

0

Хорошо, я нашел проблему.

Чтобы распечатать переменную rootScope, вам нужно добавить {{$ route.windowName}}.

Кроме того, если вы используете ExpressJS с HoganTemplate, убедитесь, что вы измените Hogan усов скобки с этим:

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

Смежные вопросы