我有服务:
storeApp.service('currentCustomer',function($http) {
this.customerID = 0;
this.customerInfo = {}
this.customerAttributes = {}
this.getCustomerInfo = function () {
if (this.customerID != 0) {
$http.get('/customers/' + this.customerID).
then(function (result) {
this.customerInfo = result.data[0]
})
}
}
和控制器:
storeApp.controller('storeList',function($scope,$http,currentCustomer) {
$scope.changeCust = function changeCust(id) {
currentCustomer.customerID = id;
currentCustomer.getCustomerInfo()
console.log("After Change customer:")
console.log(currentCustomer)
}
$scope.selectedStore = currentCustomer
});
如果我尝试访问selectedStore.customerID,我会得到值。
如果我尝试访问selectedStore.customerInfo,我会得到一个空数组,即使我在控制台登录时检查值,也表示它们已被分配。
任何想法我做错了什么?谢谢大家。
答案 0 :(得分:1)
您对this
的引用已在功能内部进行了更改。首先在某个变量中存储this
引用然后分配属性,有些人更喜欢使用单词self
,但我更喜欢service
storeApp.service('currentCustomer',function($http) {
var service = this;
service.customerID = 0;
service.customerInfo = {}
service.customerAttributes = {}
service.getCustomerInfo = function () {
if (service.customerID != 0) {
$http.get('/customers/' + this.customerID).
then(function (result) {
service.customerInfo = result.data[0]
});
}
}
答案 1 :(得分:1)
您正在手动为CustomerId
分配值,并且您的服务方法正在为customerInfo
分配值。服务方法中的this
除外,与服务中的this
不同。您应该在服务中实例化var self = this;
引用,并在所有对象操作中使用此值。例如:self.customerInfo = ....