Javascript 无法将数据传递到angularjs中的数据对象
注:我对angularJS编程非常陌生。我试图做的是,将服务返回的信息保存到对象。我的物体看起来像这样Javascript 无法将数据传递到angularjs中的数据对象,javascript,angularjs,Javascript,Angularjs,注:我对angularJS编程非常陌生。我试图做的是,将服务返回的信息保存到对象。我的物体看起来像这样 var userObject = { "id": "1", "firstName": "Amelia", "lastName": "Earheart" }; 我有一个从后端返回数据的工厂,它如下所示: .factory('myService'
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 literalactiveUser
的一部分,因为稍后添加属性时没有特定原因会影响性能。其次,http
请求的实际结果将在响应的data
属性中,该属性在本代码中也被命名为data
,因此我认为它应该是data.data.id
等等