这是通过使用服务而不是工厂解决的,如 plunker 中所述:http://plnkr.co/edit/uh23lrXz2mI4ukvJvxws?p=preview由@Incognos 提供。接受的答案是@Tomislav,因为他第一次提到使用服务。
我已经创建了一个 Controller 来处理商店项目,它们是这样存储的(删除重复以节省此处的空间):
'use strict';
angular.module('angularStoreApp')
.controller('storeCtrl', function($scope){
$scope.product = {
items: [
{
qty: 0,
stock: 5,
price: 99.00,
name: 'Almond Toe Court Shoes, Patent Black',
category: 'Womens Footerwear'
}
]
};
});
我需要创建一个服务来保存这些数据,以便可以从另一个 View / Controller 访问它。 (这将是最后的购物车页面)。我尝试使用 .factory,然后在 Controller 中 $scope.products = serviceName.items;但无济于事。我也通过 Controller 注入(inject)了服务。我得到一个 $injector:modulerr 错误。
澄清一下,我创建的服务是这个
var app = angular.module("angularStoreApp", []);
app.factory("StoreService", function() {
var products = {
items: [
{
qty: 0
}
]
};
return products;
});
Controller 是这样的:
'使用严格';
angular.module('angularStoreApp')
.controller('storeCtrl', function($scope, StoreService){
$scope.product = StoreService.items;
});
我一直在思考如何将原始 Controller 中的数据放入服务中,然后将服务注入(inject) Controller 以再次显示项目。请注意,不使用服务,数据在 View 中显示得非常好。
最佳答案
不要使用工厂,创建一个始终是单例的服务并将保存您的数据:
var app = angular.module('angularStoreApp',[]);
app.service('StoreService',function(){
var products={
items:[]
};
this.save=function(item){
products.items.push(item);
};
this.get=function(){
return products;
};
});
将它注入(inject)你的 Controller :
app.controller('storeCtrl',function($scope,StoreService){
var item={qty:0}
StoreService.save(item);
$scope.product=StoreService.get();
console.log($scope.product);
});
因为服务是单例的,所以它在整个应用程序中是全局的。您可以将它注入(inject)任何 Controller ,它会记住您保存的值。
关于javascript - Angular.js 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31214637/