Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 从api rest获取的存储数据的角度提供程序(服务)?_Angularjs_Http_Config_Provider - Fatal编程技术网

Angularjs 从api rest获取的存储数据的角度提供程序(服务)?

Angularjs 从api rest获取的存储数据的角度提供程序(服务)?,angularjs,http,config,provider,Angularjs,Http,Config,Provider,我使用一个控制器将产品数据加载到$rootScope数组中。我使用的是$http服务,工作正常,但现在我有了一个新函数,可以获取要加载的产品数量。我无法使用该功能,因为响应很慢。 我想知道是否可以在应用程序启动之前,使用提供者加载要在config方法中获取的产品数量。如果我可以将$rootScope数组移动到一个服务。我不理解Angular文档,它们甚至在教程中都不是很有用,至少在提供者和服务中是这样的 app.controller('AppController', [ '$rootScope'

我使用一个控制器将产品数据加载到$rootScope数组中。我使用的是$http服务,工作正常,但现在我有了一个新函数,可以获取要加载的产品数量。我无法使用该功能,因为响应很慢。 我想知道是否可以在应用程序启动之前,使用提供者加载要在config方法中获取的产品数量。如果我可以将$rootScope数组移动到一个服务。我不理解Angular文档,它们甚至在教程中都不是很有用,至少在提供者和服务中是这样的

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();


                };

}]);