如何观看延期服务属性?

时间:2013-03-07 17:05:08

标签: angularjs

如果我有以下简单的控制器&服务。

<div ng-controller="MessagesCtrl">
  <ul>
    <li ng-repeat="message in data.messages">
      {{ message }}
    </li>
  </ul>
</div>

myApp.factory('Data', function () {
  var _messages = [];
  return {
    messages: _messages,
    getMessages: function() {
      $http.get('/messages').then(function(response) {
        _messages = response.data;
      });
    }
  };
});

function MessagesCtrl($scope, Data) {
  $scope.data = Data;
  $scope.data.getMessages();
}

我希望messages模型在AJAX请求完成并填充对象时自动更新,但事实并非如此。这应该怎么样? (我有点问这个结构的最佳实践是什么。)

编辑 - 工作解决方案:

<div ng-controller="MessagesCtrl">
  <ul>
    <li ng-repeat="message in data.messages">
      {{ message }}
    </li>
  </ul>
</div>

myApp.factory('Data', function () {
  return {       
    getMessages: function() {
      var _this = this;
      $http.get('/messages').then(function(response) {
        _this.messages = response.data;
      });
    }
  };
});

function MessagesCtrl($scope, Data) {
  $scope.data = Data;
  $scope.data.getMessages();
}

1 个答案:

答案 0 :(得分:3)

我很确定你在这里遇到JavaScript问题而不是与AngularJS相关的问题。让我们删除与AngularJS相关的代码,只留下JavaScript片段:

function factory() {
  var _messages = [];
  return {
    messages: _messages,
    getMessages: function() {
      _messages = [1, 2, 3, 4];
    }
  }
}

> var test = factory();
undefined
> test.messages
[]
> test.getMessages()
undefined
> test.messages
[]

test.messages指向origin _messages数组,而后来的_messages正在改变,但test.messages却没有。