我試圖從服務中加載數據並使用$ q更新視圖,但它不工作。如果我把http調用放在控制器裏面,它可以工作,但我更喜歡它是服務的一部分。
任何幫助?另外,有沒有更好的方式來做到這一點,而不是承諾?
下面的演示和代碼。
---------- ---------- Fiddle Demo Link
查看
<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;
}]);
IIRC,結果在'.then'的HTTP是請求本身,和你想'result.data' –
似乎在搗鼓做工精細沒有'.data' –
是的,但小提琴沒有發出HTTP請求,是:) :)? –