2013-05-06 1 views
2

Fiddle: http://jsfiddle.net/6RBJ5/1/Изменить объект от дочернего объема в angularjs

Поэтому в основном я хочу, чтобы получить доступ к объекту из родительской области, который модифицирован в детской области.

function Parent($scope) { 
    $scope.data = null; 
} 

function Child($scope) { 
    $scope.data = [{id:1}, {id:2}] 
} 

HTML:

<div ng-controller="Parent"> 
    Data length: {{ data.length }}<br> 
<div ng-controller="Child"></div> 
</div> 

Однако длина ничего не выводит. Любые идеи, как это исправить?

ответ

3

One way:

$scope.$parent.data = [{id:1}, {id:2}] 

хотя это не чувствует себя хорошо.

Another would be to create the empty array in the parent, and just modify it instead of replacing it in the child.

Или, может быть, что вам действительно нужно, это use a service; это зависит от того, чего вы действительно пытаетесь достичь.

Определение службы:

var myApp = angular.module('myApp', []); 
myApp.factory('tickets', function factory() { 

    var tickets = []; 

    function add(ticket){ 
     tickets.push(ticket); 
    } 
    function count(){ 
     return tickets.length; 
    } 

    return { 
     add: add, 
     count: count 
    }; 

}); 

Использование службы:

function Parent($scope, tickets) { 
    $scope.tickets = tickets; 
} 

function Child($scope, tickets) { 

    tickets.add({id:1}); 
    tickets.add({id:2}); 

} 

HTML:

<div ng-controller="Parent"> 
    Data length: {{ tickets.count() }}<br> 
    <div ng-controller="Child">  
    </div> 
</div> 

Обратите внимание, как чистый и бизнес-modelly диспетчеры, и что вы можете полностью расширить концепцию билетов в одном месте и получить доступ к ней из любого места, введя ее в контроллер. Вы можете сделать это, не беспокоясь об иерархии или взаимосвязи между контроллерами или загрязнении среды. С другой стороны, это может быть чрезмерным, если ваше приложение чрезвычайно простое.

+0

Я хочу просто показать длину билетов в родительском пространстве. Это все. Какое решение вы бы предложили? –

+0

Как правило, правильный способ общения между нерегулярными контроллерами - это службы, поэтому я считаю, что «правильным» решением является использование службы. Это будет держать ваши контроллеры развязанными и чистыми. Недостатком является то, что для этого требуется больше кода. Я добавлю пример. – Supr

1

Я думаю, что это относится к вопросу о наличии глобальных углов. Самый простой способ сделать это - $ rootScope.

увидеть это Global variables in AngularJS

и here

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