11

以下の不自然な例で、共有サービスを使用して 2 つの AngularJS コントローラー間でデータを共有する方法を理解しました。

(機能しているフィドル)

var app = angular.module('myApp', []);

app.factory('UserData', function() {
    var data = {foo: 'bar'};

    return {
        getData: function() {
            console.log('getData');
            return data;
        },
        setData: function(newData) {
            data = newData;
        }
    };
});

function MainCtrl($scope, UserData) {
    console.log('MainCtrl');
    console.log(UserData.getData());
}
MainCtrl.$inject = ['$scope', 'UserData'];

function JobListCtrl($scope, UserData) {
    console.log('JobListCtrl');
    console.log(UserData.getData());
}
JobListCtrl.$inject = ['$scope', 'UserData'];

私の問題は、保持されているデータをUserDataAjax 呼び出し (おそらく を使用$http) から取得したいということです。

ファクトリ関数で Ajax 呼び出しを実行しようとしましたUserDataが、非同期で実行されMainCtrlているため、サービスに実際にデータが含まJobListCtrlれる前に実行されます。UserData

誰かがそれを設定する方法について私に指示を与えることができますか?

4

2 に答える 2

3

ここにあなたを助けるためのいくつかの出発点があります:

  1. サーバーからデータを取得する方法 (および基本的な「モデル」サービスを構築する方法): SO 投稿

  2. データがサーバーからフェッチされるまでコントローラーの実行を保持する方法: egghead.ioのスクリーンキャスト

于 2013-02-26T20:06:04.143 に答える