2013-05-19 9 views
7

Mam następujący:Czy zakres kontroler dziedziczy od kontrolera nadrzędnego przy użyciu UI-routera

var admin = { 

    name: 'admin', 
    url: '/admin', 
    views: { 
     'nav-sub': { 
      templateUrl: '/Content/app/admin/partials/nav-sub.html', 
      controller: function ($scope) { $scope.message = "hello"; } 
     } 
    }, 
    controller: ['$scope', function ($scope) { 
     $scope.message = "hello"; 
    }] 
} 

var subject = { 
    name: 'subject', 
    parent: admin, 
    url: '/subject', 
    views: { 
     '[email protected]': { 
      templateUrl: '/Content/app/admin/partials/grid-subject.html', 
      controller: 'AdminGridSubjectController', 
     } 
    } 
}; 

Chciałbym AdminGridSubjectController wiedzieć, jaka jest wartość $ scope.message jest, ale wydaje się nie do poznania nic na ten temat. Czy jest coś, co robię źle?

stApp.controller('AdminGridSubjectController', ['$scope', function ($scope) { 
    var a = $scope.message; 
}]); 

Odpowiedz

17

w celu aby uzyskać dostęp do scope kontrolera nadrzędnego w użyciu Angular UI Router:

$scope.$parent 

Następnie zakres rodzica jest wówczas swobodnie dostępny.

+1

To nie działa dla widoków. Widok podrzędny nie ma dostępu do właściwości użytkownika innego niż root, który zawiera widok. Po prostu nie istnieją i nie są odpowiednio eksponowane. – egervari

+0

Szukałem wiele godzin! thanx a bunch – tinybyte

0

Twój problem może być, że nazwa powinna odzwierciedlać rodzica w nim:

var subject = { 
    name: 'admin.subject', 
    parent: admin, 
    url: '/subject', 
    ... 

Oto pełna Ilustracja jak dziedziczyć $ zakres z UI-Router: plunker ex

+0

schwarts - Dzięki Ben. Próbowałem, ale nadal mam problem. Zastanawiam się, czy to ma coś wspólnego z faktem, że używam poglądów. –

+0

@Anne Jest to problem z widokiem. – luthur

+0

Nie musi tego być, jeśli zadeklarujesz 'rodzic', prawda? Czy można użyć łańcucha zamiast odwołania do obiektu? Jak, '{..., rodzic: 'admin', ...}'? Dzięki! – Cody