我想問/討論這是好還是不好的做法 - 做一個服務調用的優點和缺點使控制器儘可能乾淨和短。換句話說:不再有回調,而是利用Angular的Angular綁定原則。解決承諾在服務中沒有控制器回調
看看一個Plnkr我分叉: http://plnkr.co/edit/zNwy8tNKG6DxAzBAclKY
我想達到什麼樣的被註釋掉的Plnkr>$scope.data = DataService.getData(3);
線42。
app.factory('DataService', function($q, $http) {
var cache = {};
var service= {
data:{src:''},
getData: function(id, callback) {
var deffered = $q.defer();
if (cache[id]) {
service.data.src = 'cache';
deffered.resolve(cache[id])
} else {
$http.get('data.json').then(function(res) {
service.data.src = 'ajax';
cache[id] = res.data;
cache[id].dataSource = service.data.src;
deffered.resolve(cache[id])
})
}
return deffered.promise.then(callback);
}
}
return service
})
app.controller('MainCtrl', function($scope, DataService) {
DataService.getData(3, function(result) {
$scope.data = result;
});
//$scope.data = DataService.getData(3);
});
你想在控制器中實現的另一件事,是處理的DataService的錯誤。通常你會想告訴用戶有關錯誤(==鏈接到UI元素的數據),並且應該在控制器中完成。所以這是一個贊成返回承諾(而不是傳遞迴調)的贊成。 –
會接受這個引導我向正確方向的引導者。一些關於UI操作的個人反饋:不要在控制器中需要這些東西,這些東西需要通過指令來處理(儘可能多)。 –
仍然有一個問題仍然存在,那就是關於鏈接承諾,我寧願在服務器和控制器之前完成這些工作,以免後者陷入混亂。你對此有何想法? –