角度服务不为空对象赋值

时间:2015-11-29 13:56:28

标签: angularjs

我有服务:

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,我会得到一个空数组,即使我在控制台登录时检查值,也表示它们已被分配。

任何想法我做错了什么?谢谢大家。

2 个答案:

答案 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 = ....