因式分解AngularJS-如何正确使用工厂来请求和更新表示数据的数据
我一直在努力找出使用工厂表示ajax数据的“角度”工作方式(我使用配置在控制器之间进行了大量共享)。我做了一些广泛的研究,所有的答案似乎分为两类:因式分解AngularJS-如何正确使用工厂来请求和更新表示数据的数据,angularjs,angularjs-factory,Angularjs,Angularjs Factory,我一直在努力找出使用工厂表示ajax数据的“角度”工作方式(我使用配置在控制器之间进行了大量共享)。我做了一些广泛的研究,所有的答案似乎分为两类: 使用工厂表示数据,然后在控制器中获取数据并更新工厂: {不打算成为实际可运行的} 使用工厂用承诺表示http请求,然后将该数据分配给$scope var app = angular.module('main', []) app.factory('data', function ($http, $q){ var factory = {};
var app = angular.module('main', [])
app.factory('data', function ($http, $q){
var factory = {};
factory.getdata = function(){
var defer = $q.defer();
$http.get('/data').success(function(idata) {
defer.resolve(idata);
})
return defer.promise;
}
return factory;
});
app.controller('cntrl', [$scope, data]){
$scope.data = []
data.getdata().then(function(idata) { $scope.data = idata });
}
var app = angular.module('main',[])
app.factory('data', function($http){
var factory = {}
factory.data = []
factory.initialise = function(){
$http.get('/data').success(
function(data){
factory.data = data
}
)
}
return factory
})
app.controller('cntrlA', [$scope, data]) {
$scope.data = data.data
$data.initialise()
}
app.controller('cntrlB', [$scope, data]) {
$scope.data = data.data
}
我正在处理一个类似问题的项目。我最后做的是将该服务用作数据存储库。不是每次初始化函数获取新数据,而是仅当数据存储库为空或
getFresh
标志被触发(手动覆盖)时才获取新数据。这样,每个控制器都可以调用相同的函数来获取数据,并根据控制器的需要对其进行操作,而不会篡改原始数据
var app = angular.module('main',[])
app.factory('dataService', function($http, $q){
var factory = {}
factory.data = []
factory.getFresh = false
factory.initialise = function(){
var deferred = $q.defer()
if(factory.data.length===0 || factory.getFresh) {
$http.get('/data').success(function(data){
factory.data = data
deferred.resolve(data)
})
}
else{
deferred.resolve(factory.data)
}
return deferred.promise
}
return factory
})
app.controller('cntrlA', [$scope, dataService]) {
$scope.data = []
dataService.initialise().then(function(data){
$scope.data = data
}
}
app.controller('cntrlB', [$scope, dataService]) {
$scope.data = []
dataService.initialise().then(function(data){
$scope.data = data
}
}
var app = angular.module('main',[])
app.factory('dataService', function($http, $q){
var factory = {}
factory.data = []
factory.getFresh = false
factory.initialise = function(){
var deferred = $q.defer()
if(factory.data.length===0 || factory.getFresh) {
$http.get('/data').success(function(data){
factory.data = data
deferred.resolve(data)
})
}
else{
deferred.resolve(factory.data)
}
return deferred.promise
}
return factory
})
app.controller('cntrlA', [$scope, dataService]) {
$scope.data = []
dataService.initialise().then(function(data){
$scope.data = data
}
}
app.controller('cntrlB', [$scope, dataService]) {
$scope.data = []
dataService.initialise().then(function(data){
$scope.data = data
}
}