2016-04-28 3 views
0

У меня есть следующий HTML структура:Угловой 1,4 - получить родительский контроллер свойство

<div class="order-table-page" ng-controller="SummaryController as summaryCtrl"> 
    <h3>Summary</h3> 
    <!-- Statutes summary information --> 
    ... 

    <!--List of orders with selected statuses--> 
    <div ng-controller="OrderTableController as orderTableCtrl"> 
    ... 
    </div> 

</div> 

Так, OrderTableController является дочерним SummaryController. Теперь в дочернем контроллере я хочу получить доступ к родительскому свойству. В родительском классе я определяю:

orderApp.controller('SummaryController', ['$location', 'ordersApi', function($location, ordersApi){ 

    var ctrl = this; 

    ctrl.summary = []; 
    ctrl.test = 'test'; 

    ... 

}]); 

И контроллер ребенка я пытаюсь получить свойство «тест»:

orderApp.controller('OrderTableController', ['$location', '$scope', 'ordersApi', function($location, $scope, ordersApi){ 

    var table = this; 
    table.orders = []; 


    console.log("Table orders 1"); 
    console.log($scope.$parent.test); 

    ... 

}]); 

Я ожидаю, что $ сферы $ Родитель будет содержать SummaryController сферы.. Но я не уверен, что он содержит, потому что $scope.$parent.test не определен и $ scope. $ Parent имеет свойство с именем summaryCtrl.

Мой вопрос: как получить родительскую собственность «тестовая» форма OrderTableController?

+0

Вы пробовали $ объем $ parent.summaryCtrl.test? –

+0

@SergioFandino да, я пробовал, и он работает. Но я не понимаю, почему $ scope. $ Parent.test этого не делает. Похоже, что с моим кодом что-то не так. – Tamara

ответ

2

Как вы используете функцию Controller As, она создает свойство внутри $scope, которое будет представлять собой сам контроллер.

Итак, в вашем SummaryController у вас есть test. И в рамках этого SummaryController это будет как $scope.summaryCtrl.test - потому что вы определили его как SummaryController as summaryCtrl.

Таким образом, вам нужно пройти по тому же пути от вашего детского контроллера, чтобы получить свойство test (он будет более элегантным, чем работа с $scope.$parent).

Если вам нужно поделиться некоторыми данными между контроллерами, вы можете попытаться использовать общие службы (как они есть одиночные) и использовать их в связанных контроллерах.

0

Вам просто нужно добавить референс в OrderTableController из SummaryController, и вы получите все от SummaryController в OrderTableController :)

Использование $scope.$parent не очень элегантно. Не обязательно неправильно, но не изящно.

+0

Что вы подразумеваете под ссылкой на контроллер? Не могли бы вы включить пример кода? – Tamara

+0

Несомненно, дайте мне несколько минут – dpaul1994

+0

Прошу прощения, у меня сейчас нет подходящего примера, но завтра я добавлю здесь комментарий с примером, хорошо? – dpaul1994

0

Это может быть потому, что вы используете this вместо $scope в родительском контроллере, если вы $scope.test='test' вы могли бы получить его так, как вы хотите $scope.$parent.test. Смотрите эту скрипку: http://jsfiddle.net/f2zyvf17/

PD: Вы можете увидеть разницу с помощью $ объема или это в этом вопросе:. 'this' vs $scope in AngularJS controllers

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