Angularjs 从api rest获取的存储数据的角度提供程序(服务)?
我使用一个控制器将产品数据加载到$rootScope数组中。我使用的是$http服务,工作正常,但现在我有了一个新函数,可以获取要加载的产品数量。我无法使用该功能,因为响应很慢。 我想知道是否可以在应用程序启动之前,使用提供者加载要在config方法中获取的产品数量。如果我可以将$rootScope数组移动到一个服务。我不理解Angular文档,它们甚至在教程中都不是很有用,至少在提供者和服务中是这样的Angularjs 从api rest获取的存储数据的角度提供程序(服务)?,angularjs,http,config,provider,Angularjs,Http,Config,Provider,我使用一个控制器将产品数据加载到$rootScope数组中。我使用的是$http服务,工作正常,但现在我有了一个新函数,可以获取要加载的产品数量。我无法使用该功能,因为响应很慢。 我想知道是否可以在应用程序启动之前,使用提供者加载要在config方法中获取的产品数量。如果我可以将$rootScope数组移动到一个服务。我不理解Angular文档,它们甚至在教程中都不是很有用,至少在提供者和服务中是这样的 app.controller('AppController', [ '$rootScope'
app.controller('AppController', [ '$rootScope', '$http', function ( $rootScope,$http) {
$rootScope.empty = 0;
$rootScope.products = [];
$rootScope.lastId = 0;
$rootScope.getLastID = function () {
$http.get("app_dev.php/api/products?op=getLastId").success(function (data) {
$rootScope.lastId = data.lastId;
});
};
$rootScope.getProducts = function () {
if ($rootScope.empty === 0) {
for (i = 1; i < 100; i++) {
$http.get("app_dev.php/api/product/" + i).success(function (data) {
$rootScope.products.push(data);
});
}
}
$rootScope.empty.productos = 1;
};
}
app.controller('AppController',['$rootScope','$http',函数($rootScope,$http){
$rootScope.empty=0;
$rootScope.products=[];
$rootScope.lastId=0;
$rootScope.getLastID=函数(){
$http.get(“app_dev.php/api/products?op=getLastId”).success(函数(数据){
$rootScope.lastId=data.lastId;
});
};
$rootScope.getProducts=函数(){
if($rootScope.empty==0){
对于(i=1;i<100;i++){
$http.get(“app_dev.php/api/product/”+i).success(函数(数据){
$rootScope.products.push(数据);
});
}
}
$rootScope.empty.productos=1;
};
}
我在工厂和服务部门都做过,但没有工作
app.factory('lastProduct', ['$http', function lastProductFactory($http) {
this.lastId;
var getLast = function () {
$http.get("app_dev.php/api/products?op=getLastId").success(function (data) {
lastId = data.lastId;
});
return lastId;
};
var lastProduct = getLast();
return lastProduct;
}]);
function productList($http, lastProduct) {
this.empty = 0;
this.lastId = lastProduct();
this.products = []
/*this.getLast = function () {
lastId = lastProduct();
};*/
this.getProducts = function () {
if (empty === 0) {
for (i = 1; i < lastId; i++) {
$http.get("app_dev.php/api/product/" + i).success(function (data) {
products.push(data);
});
}
}
empty = 1;
return products;
};
}
app.service('productsList', ['$http', 'lastProduct' , ProductsList]);
app.factory('lastProduct',['$http',函数lastProductFactory($http){
这是拉斯蒂德;
var getLast=函数(){
$http.get(“app_dev.php/api/products?op=getLastId”).success(函数(数据){
lastId=data.lastId;
});
返回lastId;
};
var lastProduct=getLast();
退货产品;
}]);
函数productList($http,lastProduct){
该值为0.empty;
this.lastId=lastProduct();
此参数为.products=[]
/*this.getLast=函数(){
lastId=lastProduct();
};*/
this.getProducts=函数(){
如果(空===0){
对于(i=1;i
发出这么多小的$http请求似乎不是一个好主意。但是使用工厂来存储要跨控制器使用的数据数组看起来是这样的。要使用工厂,您需要返回公开的api。(使用服务时使用此样式。我建议用谷歌搜索不同的但我更喜欢工厂)。如果您需要提醒其他控制器数据已更改,则可以使用事件
angular
.module('myApp')
.factory('myData', myData);
function myData($http, $rootScope) {
var myArray = [], lastId;
return {
set: function(data) {
$http
.get('/path/to/data')
.then(function(newData) {
myArray = newData;
$rootScope.$broadcast('GOT_DATA', myArray);
})
},
get: function() {
return myArray
},
getLast: function() {
$http
.get('/path/to/data/last')
.then(function(last) {
lastId = last;
$rootScope.$broadcast('GOT_LAST', lastId);
})
}
}
}
然后,从任何控制器,你可以注入工厂,获取和设置你认为合适的数据
angular
.module('myApp')
.controller('MainCtrl', MainCtrl);
function MainCtrl($scope, myData) {
$scope.bindableData = myData.get(); // get default data;
$scope.$on('GOT_DATA', function(event, data) {
$scope.bindableData = data;
})
}
我希望这有帮助。如果您有任何问题,请告诉我。服务在配置期间不可用,只有提供程序,因此您不能使用$http在配置块内获取值,但您可以使用run块 你能行
angular.module('app',['dependencies']).
config(function(){
//configs
})
.run(function(service){
service.gerValue()
})
在服务内部或值内部设置检索值是避免污染根作用域的一个好主意,通过这种方式,在实例化服务之前检索值,您可以将检索到的值作为依赖项注入。我这样做了,但不起作用。当从某些服务器调用set方法时,根作用域总数未定义控制器。 但是使用10代替了rootscope总数 我可以看到rootScope total var比其他var先到达。。。 (app_dev.php/api/productos?op=ultimaIdProductos)vs(app_dev.php/api/producto/x)
var-app=angular.module('webui',[$http,$rootScope]);
app.run(函数($http,$rootScope){
$http.get(“app_dev.php/api/products?op=getLastId”).success(函数(数据){
$rootScope.total=data.ultima;
});
});
函数myData($http,$rootScope){
var myArray=[];
返回{
集合:函数(){
log($rootScope.total);
对于(i=1;i<$rootScope.total;i++){
$http.get(“app_dev.php/api/product/”+i).success(函数(数据){
推送(数据);
})
}
},
get:function(){
返回myArray;
}
}
}
app.controller('AppController',['$http','$rootScope','myData',函数($http,$rootScope,myData){
$rootScope.productos=[];
$rootScope.getProductos=函数(){
log($rootScope.total);
myData.set();
$rootScope.productos=myData.get();
};
}]);
我可以把$http logic inside set方法放在myData()上吗?是的,很好用。非常感谢。你让它看起来很简单。但是我应该把$http.get(“app_dev.php/api/products?op=getLastId”)放在哪里呢?成功(函数(数据){$rootScope.lastId=data.lastId;});您也可以添加另一个方法来执行此操作。只需返回另一个方法并将该值保存在另一个局部变量中。我会将答案更新为showYes,我这样做了,但api返回上一个产品id值的速度似乎很慢。我在api url中使用pdo mysql,在fetch products的api中使用doctrine,看起来pdo正在使用返回上一个id值太多了。但是我如何获得在.run函数上获得的值呢?我应该使用$rootScope吗?您已经在使用一个服务了,您可以将它们存储在那里,或者将它们传递到其他服务中
var app = angular.module('webui', [$http, $rootScope]);
app.run (function ($http, $rootScope){
$http.get("app_dev.php/api/products?op=getLastId").success(function (data) {
$rootScope.total = data.ultima;
});
});
function myData($http, $rootScope) {
var myArray = [];
return {
set: function () {
console.log($rootScope.total);
for (i = 1; i < $rootScope.total; i++) {
$http.get("app_dev.php/api/product/" + i).success(function (data) {
myArray.push(data);
})
}
},
get: function () {
return myArray;
}
}
}
app.controller('AppController', ['$http', '$rootScope', 'myData', function ($http, $rootScope, myData) {
$rootScope.productos = [];
$rootScope.getProductos = function () {
console.log($rootScope.total);
myData.set();
$rootScope.productos = myData.get();
};
}]);