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}]

それは正しくないと思いますが。

もう 1 つは、親で空の配列を作成し、子で置き換えるのではなく、単に変更することです。

または、本当に必要なのはサービスを使用することかもしれません。それはあなたが本当に達成しようとしていることに依存します。

サービスの定義:

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>

コントローラーがいかにクリーンでビジネス モデルに適合しているか、チケットの概念を 1 か所でクリーンに拡張し、コントローラーに挿入することでどこからでもアクセスできることに注目してください。コントローラー間の階層や関係を気にしたり、環境を汚染したりすることなく、これを行うことができます。一方、アプリケーションが非常に単純な場合はやり過ぎかもしれません。

于 2013-05-06T08:37:20.980 に答える
1

これは、Angular でグローバルを使用するという問題を指していると思います。これを行う最も簡単な方法は、$rootScope を使用することです。

このAngularJS のグローバル変数を参照してください

そしてここ

于 2013-05-06T08:35:55.210 に答える