Javascript 无法将数据传递到angularjs中的数据对象

Javascript 无法将数据传递到angularjs中的数据对象,javascript,angularjs,Javascript,Angularjs,注:我对angularJS编程非常陌生。我试图做的是,将服务返回的信息保存到对象。我的物体看起来像这样 var userObject = { "id": "1", "firstName": "Amelia", "lastName": "Earheart" }; 我有一个从后端返回数据的工厂,它如下所示: .factory('myService'

注:我对angularJS编程非常陌生。我试图做的是,将服务返回的信息保存到对象。我的物体看起来像这样

var userObject = {
                    "id": "1",
                    "firstName": "Amelia",
                    "lastName": "Earheart"
                };
我有一个从后端返回数据的工厂,它如下所示:

.factory('myService', function($http) {
            var baseUrl = 'backendservice/';

            return {
                myInfo:function() {
                    return $http.get(baseUrl + 'getmyInfo');
                }
            };
        })
(function() {
    angular
        .module('myApp.spa', [])

        .factory('myService', function($http) {
            var baseUrl = 'backendservice/';

            return {
                myInfo:function() {
                    return $http.get(baseUrl + 'getmyInfo');
                }
            };
        })

        .controller('myController', function($routeParams,myService) {
            var my = this;

            my.basicInfo = function () {
                    //to get my info
                    myService.myInfo().success(function(data) {
                        my.activeUser.myData.id             = data.id;
                        my.activeUser.myData.firstName  = data.firstName;
                        my.activeUser.myData.lastName   = data.lastName;
                    }); 
            };


            my.addSomething = function(post) {
                var userObject = my.basicInfo();

            };

        });         
})();
这就是我的控制器与工厂服务的通信方式:

    .controller('myController', function($routeParams,myService) {
        var my = this;

        my.basicInfo = function () {
                //to get my info
                myService.myInfo().success(function(data) {
                    my.activeUser.myData.id             = data.id;
                    my.activeUser.myData.firstName  = data.firstName;
                    my.activeUser.myData.lastName   = data.lastName;
                }); 
        };


        my.addSomething = function(post) {
            var userObject = my.basicInfo();

        };

    });
这就是我如何将数据分配给
userObject

var userObject = my.basicInfo();
我不知道为什么它不起作用。Factory服务运行,但该值未分配给userObject

我的控制器整体如下所示:

.factory('myService', function($http) {
            var baseUrl = 'backendservice/';

            return {
                myInfo:function() {
                    return $http.get(baseUrl + 'getmyInfo');
                }
            };
        })
(function() {
    angular
        .module('myApp.spa', [])

        .factory('myService', function($http) {
            var baseUrl = 'backendservice/';

            return {
                myInfo:function() {
                    return $http.get(baseUrl + 'getmyInfo');
                }
            };
        })

        .controller('myController', function($routeParams,myService) {
            var my = this;

            my.basicInfo = function () {
                    //to get my info
                    myService.myInfo().success(function(data) {
                        my.activeUser.myData.id             = data.id;
                        my.activeUser.myData.firstName  = data.firstName;
                        my.activeUser.myData.lastName   = data.lastName;
                    }); 
            };


            my.addSomething = function(post) {
                var userObject = my.basicInfo();

            };

        });         
})();

函数
my.basicInfo()
不返回任何内容,因此变量
userObject
的值是
未定义的。另外,如果要在视图中使用
userObject
,请在控制器实例中将其作为
my.userObject
公开

如果要将值分配给
userObject
,请在
my.basicInfo()
方法的
success
回调中执行,或者从方法
my.basicInfo()
返回承诺,并在
中分配值,然后在该承诺的
回调中执行

方法1

    my.basicInfo = function () {
            //to get my info
            var activeUser = {};
            return myService.myInfo()
            .then(function(response) {
                angular.extend(activeUser, response.data);
                my.userObject = activeUser;
            }); 
    };
方法2

    my.basicInfo = function () {
            //to get my info
            var activeUser = {};
            return myService.myInfo()
            .then(function(data) {
                angular.extend(activeUser, response.data);
                return activeUser;
            }); 
    };

    my.addSomething = function(post) {
        my.basicInfo()
         .then(function (response) {
           my.userObject = response;
         });
    };

原因是my.basicInfo不返回任何内容,而且从$http.success/failure中,您不能返回任何值。 因此,在这种情况下,您必须执行以下步骤:

  • 在控制器顶部定义var userObject,以便所有方法都可以访问它
  • 将数据分配给$http成功回调内的userObject

    (function() {
    angular
        .module('myApp.spa', [])
    
        .factory('myService', function($http) {
            var baseUrl = 'backendservice/';
    
            return {
                myInfo:function() {
                    return $http.get(baseUrl + 'getmyInfo');
                }
            };
        })
    
        .controller('myController', function($routeParams,myService) {
            var my = this;
            var userObject;
    
            my.basicInfo = function () {
                    //to get my info
                    myService.myInfo().success(function(data) {
                        my.activeUser.myData.id             = data.id;
                        my.activeUser.myData.firstName  = data.firstName;
                        my.activeUser.myData.lastName   = data.lastName;
    
                        userObject = data;
                    }); 
            };
    
    
            my.addSomething = function(post) {
                my.basicInfo();
    
            };
    
        });         
    })();
    

  • 在函数中定义变量:my.addSomething=function(post){var userObject=my.basicInfo();};它将无法从外部访问
    my.activeUser.myData.id
    这是在哪里定义的?这应该是基于共享代码引发的错误。
    var userObject=my.basicInfo()
    ,但是
    basicInfo
    不返回任何内容服务是否返回数据?尝试放置console.log(数据),并在浏览器控制台上检查它是否打印了内容。您无法从嵌套异步调用返回。这是错误的。您的代码仍然会有相同的结果,因为函数
    basicInfo
    不返回任何
    activeUser.myData.id
    ,其他所有内容都将抛出错误,因为
    myData
    未定义。在这两种情况下都没有返回承诺。@vp\u完成。修正了返回的问题promise@TJ在
    activeUser
    对象上添加属性
    myData
    ,以修复error@AdityaSingh最好将其作为object literal
    activeUser
    的一部分,因为稍后添加属性时没有特定原因会影响性能。其次,
    http
    请求的实际结果将在响应的
    data
    属性中,该属性在本代码中也被命名为
    data
    ,因此我认为它应该是
    data.data.id
    等等