2013-03-20 84 views
5

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

这里是我的服务的参考片段:

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

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

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

    return itemsService; 
}); 

而在后端,我如何使用Node.js + expressjs +玉,所以我会使用被注入数据到页面:

!{JSON.stringify(items)} 
+0

可能的复制。在原来更好的答案 - [如何引导数据,因为它是由在Angular.js一个$资源服务获取(http://stackoverflow.com/questions/12451864/how-to-bootstrap-data-as-it-它,是牵强按A-资源的服务功能于角JS) – EBarr 2014-04-19 13:35:23

回答

3

从服务器上把你的自举数据成为一个全球性的JavaScript变量。将您的服务分配给该全局变量items(或将数据复制到items)。

+0

这就是我的想法,但在我的代码中应该在哪里分配/复制?因为只是做了'app.factory'调用中创建服务,更换'项目= []'和'项目= window.bootstrappedData'(其中bootstrappedData是JavaScript变量全球)似乎并没有工作。 – 2013-03-21 19:58:32

+0

我会把任务/复制放在你尝试过的地方。我唯一能想到的就是确保将数据分配给全局变量'bootstrappedData'的JavaScript代码在Angular之前执行。事实证明, – 2013-03-21 20:06:25

+0

只是我的一个小错误,我将数据放入其中的脚本标记的type属性设置为“js/data”,因此它不会被当作javascript执行。 > _ < – 2013-03-21 20:40:11

1

怎么是这样的:

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

这假设你items小号ervice有一个load函数(或类似的东西),它使用$ http或$ resource来完成实际的Ajax工作。

+0

但当时如果我刚刚打电话给我'负载()'功能,我仍然就是这个Ajax请求加载数据,而不是使用内嵌的JavaScript注入的'items'数组,或者我完全误解了你的答案? – 2013-03-20 21:14:26

+0

我假设一个“加载”函数将执行一个Ajax请求,其成功函数会将新数据集分配到内联“items”变量中。所以“加载”不会返回任何东西;它唯一的目的是将数据导入到您的内部“项目”数组中。 – Jollymorphic 2013-03-20 21:55:44