angularJS-无法从http

时间:2016-06-16 08:11:13

标签: angularjs

<a class="clickme" ng-click="vm.open()" >Click ME</a>

在我的HTML代码中,我有一个上面给出的链接,单击它会打开一个模式弹出窗口。这个模态弹出窗口与它自己的控制器相关联。 因此,当调用此链接时,我必须传递一个通过http请求获取的值。这就是我的控制器的样子;

(function() {

angular
    .module('myApp.abc', [])

    .factory('myService', function($http) {
    })

    .controller('MyController', function($routeParams, myService, $scope, $uibModal,$http) {
        var vm = this;

        vm.open = function () {
            var modalInstance = $uibModal.open({
                animation: $scope.animationsEnabled,
                templateUrl: 'path to modal popup',
                controller: 'modalPopController',
                resolve: {
                    id: function () 
                    {
                        var myid;
                        var baseUrl = 'services/';
                        $http.get(baseUrl+ 'get_user_session')
                        .then(function(response) {
                            myid = response.id;
                            return myid;
                        });
                    }
                }
            });

            modalInstance.result.then(function (myCroppedImage) {
                vm.member.avatar = myCroppedImage;
            }, function () {
                $log.info('Modal dismissed at: ' + new Date());
            });
        };

    });
})();

在这个控制器中,这是我与服务进行通信的部分,该服务返回一个我正在尝试分配给变量id的值。这就是代码:

var modalInstance = $uibModal.open({
                animation: $scope.animationsEnabled,
                templateUrl: 'path to modal popup',
                controller: 'modalPopController',
                resolve: {
                    id: function () 
                    {
                        var myid;
                        var baseUrl = 'services/';
                        $http.get(baseUrl+ 'get_user_session')
                        .then(function(response) {
                            myid = response.id;
                            return myid;
                        });
                    }
                }
            });

但是我得到了未定义的错误。那是什么意思?

更新

如果我输入这样的静态值,它可以正常工作。

resolve: {
                    id: function () {
                        return 5;
                    }
                }

我的服务以JSON的形式返回结果:

{"id":"5","name":"John"}

3 个答案:

答案 0 :(得分:1)

我不确定这是否适用于你,但你可以尝试这样的事情

var modalInstance = $uibModal.open({
                animation: $scope.animationsEnabled,
                templateUrl: 'path to modal popup',
                controller: 'modalPopController',
                resolve: {
                    id: function () 
                    {
                        var myid;
                        var baseUrl = 'services/';
                        var defer = $q.defer();
                        $http.get(baseUrl+ 'get_user_session')
                        .then(function(response) {
                            myid = response.id;
                           defer.resolve(myid);
                        });
                    return defer.promise;
                  }
                }
            });

答案 1 :(得分:0)

我认为不是:

id: function () 
                    {
                        var myid;
                        var baseUrl = 'services/';
                        $http.get(baseUrl+ 'get_user_session')
                        .then(function(response) {
                            myid = response.id;
                            return myid;
                        });
                    }
你可以:

response: function () 
                    {
                        var myid;
                        var baseUrl = 'services/';
                        return $http.get(baseUrl+ 'get_user_session');
                    }

然后在您的id = response.id中使用modal controller

或者另一种方法是创建自己的延迟对象并在http.then中解析它并从函数返回defer.promise(如@elasticrash所示)。

答案 2 :(得分:0)

实际响应数据在response.data中,因此您应该使用以下内容:

myid = response.data.id

更多澄清: 响应对象包含响应标头,状态代码,状态文本和配置。数据只是响应的一部分。这就是为什么你应该使用response.data来获取实际的响应数据。例如,response.status包含HTTP响应代码和response.config.headers原始HTTP请求标头。

只需执行console.log(响应),您就会看到数据在响应对象中的结构。