【问题标题】:Sharing data between AngularJS controllers but having the shared data come from an Ajax call在 AngularJS 控制器之间共享数据,但共享数据来自 Ajax 调用
【发布时间】:2014-02-12 06:42:00
【问题描述】:

在下面的人为示例中,我已经弄清楚了如何使用共享服务在两个 AngularJS 控制器之间共享数据:

(功能fiddle

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 调用,但由于它是异步运行的,因此 MainCtrlJobListCtrlUserData 服务中实际包含任何数据之前执行。

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

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

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

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

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

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

希望对你有帮助。

【讨论】:

  • 对于一些不太热衷于 Angular 依赖等的人来说,在这里或在 Git 中提供一点见解可能很有用。
  • 这对集合有什么作用,比如说,我想从“模态”控制器添加一个模型,并在保存数据时更新主列表?假设模态控制器是抽象的(可以是任何在主控制器范围内“浮动”的模态)。
  • 现场示例目前不起作用。这里没有 GitHub 页面。
【解决方案2】:

这里有一些帮助你的起点:

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

  2. 如何在从服务器获取数据之前保持控制器执行:screencast from egghead.io

【讨论】:

猜你喜欢
  • 2015-12-15
  • 2014-03-22
  • 2013-05-28
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多