サービスからデータをロードし、$q を使用してビューを更新しようとしていますが、うまくいきません。http 呼び出しをコントローラー内に配置すると機能しますが、サービスの一部にすることをお勧めします。
何か助けはありますか?また、約束の代わりにこれを行うより良い方法はありますか?
以下のデモとコード。
---------- Fiddle Demo リンク----------
意見
<div ng-init="getData()">
<div ng-repeat="item in list">{{item.name}}</div>
</div>
コントローラ
.controller('ctrl', ['$scope', 'dataservice', '$q', function ($scope, dataservice, $q) {
$scope.list = dataservice.datalist;
var loadData = function () {
dataservice.fakeHttpGetData();
};
var setDataToScope = function () {
$scope.list = dataservice.datalist;
};
$scope.getData = function () {
var defer = $q.defer();
defer.promise.then(setDataToScope());
defer.resolve(loadData());
};
}])
サービス
.factory('dataservice', ['$timeout', function ($timeout) {
// view displays this list at load
this.datalist = [{'name': 'alpha'}, {'name': 'bravo'}];
this.fakeHttpGetData = function () {
$timeout(function () {
// view should display this list after 2 seconds
this.datalist = [{'name': 'charlie'}, {'name': 'delta'}, {'name': 'echo'}];
},
2000);
};
return this;
}]);