11

在下面的人为示例中,我已经弄清楚了如何使用共享服务在两个 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'];

我的问题是我希望保存的数据UserData来自 Ajax 调用(大概使用$http)。

UserData我尝试在工厂函数中进行 Ajax 调用,但是因为它是异步运行的,MainCtrl并且在服务中实际包含任何数据JobListCtrl之前执行。UserData

有人可以给我一些关于如何设置的指导吗?

4

2 回答 2

10

我创建了这个示例,展示了如何在不同控制器之间获取、存储和共享数据(模型),而不会丢失其可绑定功能。

现场示例: http: //pablodenadai.github.io/SharingModelsAngularJS/

源代码1:(资源和模型抽象)https://github.com/pablodenadai/SharingModelsAngularJS/blob/master/app/scripts/controllers/main.js

回购: https ://github.com/pablodenadai/SharingModelsAngularJS

希望能帮助到你。

于 2013-05-25T01:49:42.083 回答
3

以下是一些可以帮助您的起点:

  1. 如何从服务器获取数据(以及如何构建基本的“模型”服务):SO post

  2. 如何在从服务器获取数据之前保持控制器执行:来自 egghead.io 的截屏视频

于 2013-02-26T20:06:04.143 回答