2

小提琴:http: //jsfiddle.net/6RBJ5/1/

所以基本上我想从父范围访问在子范围中修改的对象。

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>

但是长度什么也没打印。任何想法如何解决这一问题?

4

2 回答 2

3

一种方式

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

虽然这感觉不对。

另一种方法是在父级中创建空数组,然后只修改它而不是在子级中替换它。

或者也许你真正需要的是使用服务;这取决于你真正想要完成的事情。

定义服务:

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>

请注意控制器的简洁性和商业模式,并且您可以在一个地方干净地扩展票证概念,并通过将其注入控制器从任何地方访问它。您可以做到这一点,而不必担心控制器之间的层次结构或关系或污染您的环境。另一方面,如果您的应用程序非常简单,则可能会有些过大。

于 2013-05-06T08:37:20.980 回答
1

我认为这指的是有角度的全局变量的问题。最简单的方法是通过 $rootScope。

在 AngularJS 中看到这个全局变量

这里

于 2013-05-06T08:35:55.210 回答