2015-08-04 3 views
3

Я использую вложенные представления ui.router в моем приложении Angular. Это соответствующая часть моей .config:Угловой ui-router: дочернее состояние, не доступное к родительскому контроллеру

$urlRouterProvider.otherwise('/'); 

$stateProvider 
.state('home', { 
    url: '/', 
    templateUrl: 'app/components/home/home.html', 
    controller: 'HomeController' 
}) 
.state('admin', { 
    url: '/admin', 
    templateUrl: 'app/components/admin/admin-dashboard.html', 
    controller: 'AdminCtrl' 
}) 
.state('admin.page-1', { 
    templateUrl: 'app/components/admin/page-1/page-1.view.html', 
    controller: 'AdminCtrl' 
}) 

То, что происходит, хотя admin.page-1 вид загружается правильно внутри admin взгляд, кажется, не имеют доступа к AdminCtrl.

Это контроллер:

(function() { 
    'use strict'; 

    angular 
     .module('peaches') 
     .controller('AdminCtrl', Controller); 

    Controller.$inject = ['$scope']; 

    function Controller($scope) { 
     var vm = this; 

     vm.test = "Hello." 
     console.log(vm.test); 

     vm.organization = { 
      name: "Western Fund" 
     }; 

     activate(); 

     function activate() { 

     } 
    } 
})(); 

console.log(vm.test) ДЕЛАЕТ работу, когда я иду в admin.page-1, но это не похоже, чтобы загрузить в моей вложенной зрения, page-1.view.html здесь:

<div class="col-xs-12"> 
    <h1>{{vm.test}}</h1> 
</div> 

Что я делаю неправильно?

+2

'vm' может быть не указано. Попробуйте добавить 'controllerAs: 'vm'' в свой провайдер маршрута для вашей страницы –

+1

вы используете controllerAs в своем HTML, но я не вижу никакой конфигурации для этого в определении вашего маршрутизатора – dhavalcengg

+0

Я не настраивал controllerAs где-нибудь, я думал, что ui.router позаботился об этом автоматически при использовании var vm = this. Это действительно проблема. – Tiago

ответ

2

Как апедемак и dhavalcengg сказал, я не определил controllerAs в моих маршрутах, так vm не был определен. Это устранило проблему:

.state('admin', { 
    url: '/admin', 
    templateUrl: 'app/components/admin/admin.html', 
    controller: 'AdminCtrl as vm' 
}) 
1

Я думаю, что вы говорите о совместном использовании $ scope между родителем и дочерним с помощью ui-router. вот пост, который объясняет это с примером https://stackoverflow.com/a/27699798/284225

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