不能从角厂返回obj

时间:2016-06-18 09:13:04

标签: angularjs factory

这是我的工厂服务。

    #include <stdlib.h> 
    #include <stdio.h>
    #include <sys/wait.h>
    #include <sys/types.h>

    int main()
    {
    int pid, status;

    int fd[2];

    char *com1[2];
    char *com2[3];

    com1[0] = "ls";
    com1[1] = NULL;

    com2[0] = "head";
    com2[1] = "-3";
    com2[2] = NULL;

    pipe(fd);

    if((pid = fork()) == -1)
    {
        printf("fork error");
        exit(1);
    }

    if(pid == 0)
    {
        /* Child process closes up output side of pipe */
        dup2(fd[0], 0);
        close(fd[1]);
        execvp(com2[0], com2);
    }

    else
    {

        /* if(waitpid(0, WIFEXITED(&status), 0) != pid)
        {
            printf("wait error");
        }
        is this even needed here? */

        /* Parent process closes up input side of pipe */
        dup2(fd[1], 1);
        close(fd[0]);
        execvp(com1[0], com1);

    }

    exit(0);

}

在我的控制器中,我使用它将它们存储在控制器范围内

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

我在chrome控制台中没有错误,我的http响应是正确的。我根本无法返回响应。

3 个答案:

答案 0 :(得分:3)

应该是:

packService.getPackages().then(function(packages) {
    vm.packages = 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对象,用于提供在加载数据时调用的回调(使用then方法)。

答案 1 :(得分:1)

<强>控制器

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

答案 2 :(得分:1)

您不应将名称放在匿名函数委托中。删除'mySuccess'&amp; 'myError'然后再试一次(不要忘记在你的控制器中处理返回作为承诺,如我之前的答案所述)。

zone_pch <- c(16, 10, 3, 8, 2)
plot(dune_pca, type = "n", scaling = 3)
points(dune_pca, display = "sites", scaling = 3, pch = zone_pch[zone])