執行的看來,工廠方法執行優先級是最高的,因此回調沒有數據來處理。做這項工作的最佳方式是什麼?
我得到了這樣的工廠
app.factory('jsonService', function($http) {
return {
getDistricts: function(callback) {
$http.get('data/districts.json').success(callback);
},
getLocations: function(path,callback) {
$http.get('data/'+path+'.json').success(callback);
}
};
});
和控制器
var app = angular.module('sandbox', []);
app.controller('sandboxCtrl',function ($scope,jsonService) {
//This one works
$scope.init1= function(){
jsonService.getDistricts(function(data){
$scope.districts = data;
$scope.currentDistrict = $scope.districts[0].name;
jsonService.getLocations($scope.currentDistrict,function(data){
$scope.locations1 = data;
})
});
};
$scope.init1();
//This one does not
$scope.init2= function(){
jsonService.getDistricts(function(data){
$scope.districts = data;
$scope.currentDistrict = $scope.districts[0].name;
})
jsonService.getLocations($scope.currentDistrict,function(data){
$scope.locations1 = data;
});
};
$scope.init2();
});
這裏的工作plunker
+1 OP:我認爲你應該接受這個答案,它比我的好得多。然而,看看我在答案中給出的例子,它們可能是這個例子的一個很好的補充。 – Josep 2014-10-08 14:09:54
另外,請注意,打開服務中的承諾並不是一個好主意,因爲這增加了不必要的耦合到您的工廠。 – Josep 2014-10-08 14:14:09
非常感謝這些信息。但是,我仍然可以使用這種方法在分離函數中調用.getLocations,還是必須將它綁定到.success()或.then()方法? – 2014-10-08 14:28:23