Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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 can';t从角度工厂返回obj_Angularjs_Factory - Fatal编程技术网

Angularjs can';t从角度工厂返回obj

Angularjs can';t从角度工厂返回obj,angularjs,factory,Angularjs,Factory,这是我的工厂服务 (function() { var appfactory = angular.module("RoyalApp"); appfactory.factory('packService', packService); packService.$inject = ['varsService', '$http']; function packService(varsService, $http) { var packages = {

这是我的工厂服务

(function() {
    var appfactory = angular.module("RoyalApp");
    appfactory.factory('packService', packService);

    packService.$inject = ['varsService', '$http'];

    function packService(varsService, $http) {

        var packages = {

            getPackages: function() {
                $http({
                    method: "GET",
                    url: "http://localhost:63666/api/Package?customer_id=" + varsService.dataObj._id
                }).then(function mySuccess(response) {
                    return response.data;
                }, function myError(response) {

                });
            }
        }
        return packages;
    }
})();
在我的控制器中,我使用它将它们存储在控制器范围内

var vm = this;
vm.packages = packService.packages.getPackages;
我也试过这个

vm.packages = packService.packages.getPackages();
我在chrome控制台中没有错误,我的http响应是正确的。我无法返回响应。

应该是:

packService.getPackages().then(函数(包){
vm.packages=包;
});
请注意,
getPackages
必须返回承诺:

getPackages: function() {
    return $http({
        method: "GET",
        url: "http://localhost:63666/api/Package?customer_id=" + varsService.dataObj._id
    }).then(function mySuccess(response) {
        return response.data;
    }, function myError(response) {

    });
}

几张便条
packService
的公共API包含单个方法
getPackages
——这就是您需要调用的方法。然后,它返回一个promise对象,您使用该对象提供一个回调(使用
然后
方法),以便在加载数据时调用。

Controller

angular.module('myApp', [])
      .controller('MyCtrl', ['$scope' 'packService', function($scope, packService){
          var vm = this;
          packService.getPackages().then(function(packages) {
            vm.packages = packages;
          });
      }]);

您不应该在匿名函数委托中输入名称。删除'mySuccess'和'myError'并重试(别忘了在我之前的答案中提到的在控制器中作为承诺处理返回)


我试过了,没用,也许我错过了什么。谢谢你花时间。我想在继续之前暂停我的应用程序,对工厂和服务进行一些研究。我在控制器中添加了一个功能,该功能可以工作(具有不同的范围变量)。出于某种原因,我希望从服务获取数据,而不是从控制器内的http调用获取数据。因此,当我在服务中传输我的函数时,即使我认为我的http调用正在工作,我也无法在服务中传递一个我可以在控制器中读取的变量的响应。也许我接近洞的方式是错误的。发布失败的代码。我给了你一个应该怎么做的解决方案。直接从控制器发出http请求不是一个好主意,应该避免。不要放弃,设置一个最小的演示:这样可能会有所帮助,它非常简单。在短暂的休息后,我再次开始项目。我根据你的回答重写了我的控制器和工厂,我最终设法使它工作。谢谢大家抽出时间。很高兴你们能理解。请随意接受答案并关闭线程。
getPackages: function() {
            $http({
                method: "GET",
                url: "http://localhost:63666/api/Package?customer_id=" + varsService.dataObj._id
            }).then(function (response) {
                return response.data;
            }, function (response) {

            });
        }