【问题标题】:AngularJS - Bootstrapping data into a service on page loadAngularJS - 在页面加载时将数据引导到服务中
【发布时间】:2013-03-10 04:38:27
【问题描述】:

在 angularjs 应用程序中,我尝试使用自定义服务来保存应用程序的主要数据“项目”。但是,我想在初始页面加载时将数据引导到服务中,以避免向服务器发出单独的 ajax 请求来获取它。这样做最干净的方法是什么?

这是我的服务的 sn-p 供参考:

app.factory('items', function() {
    var itemsService = {},
        items = [];

    itemsService.list = function() {
        return items;
    };

    itemsService.add = function() {
        /* ... */
    };

    return itemsService;
});

在后端我使用的是 node.js + expressjs + jam,所以我将使用以下方法将数据注入页面:

!{JSON.stringify(items)}

【问题讨论】:

标签: angularjs bootstrapping angularjs-service


【解决方案1】:

这样的事情怎么样:

app.run(['items', function (items) {
   items.load();
}])

这假定您的 items 服务有一个 load 函数(或类似的函数),它使用 $http 或 $resource 执行实际的 Ajax 工作。

【讨论】:

  • 但是如果我只是调用我的 load() 函数,我仍然只是发出 ajax 请求来加载数据,而不是使用 items 的内联 javascript 注入数组,或者我完全误解了你的答案?
  • 我假设“加载”函数将执行 Ajax 请求,其成功函数会将新数据集分配到内联“项目”变量中。所以“加载”不会返回任何东西;它的唯一目的是将数据放入您的内部“项目”数组中。
【解决方案2】:

将来自服务器的引导数据放入全局 JavaScript 变量中。让您的服务将 items 分配给该全局变量(或将数据复制到 items)。

【讨论】:

  • 这就是我的想法,但是我的代码中应该在哪里进行分配/复制?因为简单地在 app.factory 调用中创建服务,用 items = window.bootstrappedData 替换 items = [](其中 bootstrappedData 是全局 javascript 变量)似乎不起作用。
  • 我会将作业/副本放在您尝试过的地方。我唯一能想到的检查是确保将数据分配给全局变量 bootstrappedData 的 JavaScript 代码在 Angular 之前执行。
  • 原来只是我的一个小错误,我将数据放入的脚本标签的类型属性设置为js/data,因此它没有作为javascript执行。 >_
猜你喜欢
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 2021-12-12
相关资源
最近更新 更多