我正在重写一些棱角分明的代码,因为事情还不清楚,文件稀疏。
我有许多以JSON格式返回的数据供稿。因此,例如,我有一个产品供稿,但也有其他供稿,例如天气和新闻等。
我对angular还是很陌生,所以我想检查一下我所想的是否足够好或可以改进。
我打算为每个数据提要添加一个factory
,以便可以在整个应用程序中多次访问它们。然后,任何指令或控制器都可以与相关模块关联,因此对于产品Feed,我将具有以下内容:
angular.module('products', [])
.factory('products', function($http) {
var products = {};
products.get = function(params, callback) {
$http.get('/php/products.php', {params: {page: params.page}}).success(function(data) {
callback(data);
});
};
return products;
});
angular.module('app', ['products'])
.controller('productsCtrl', function ($scope, products){
$scope.page = 1;
$scope.products=[];
products.get({page: $scope.page}, function (data) {
for (var i = 0; i < data.length; i++) {
$scope.products.push(data[i]);
}
})
});
这意味着,如果我需要在其他控制器中提供产品,则可以轻松实现。例如,我可以在不同的控制器中购买最后三款产品,然后修改传递回后端的参数。
最佳答案
为这些请求提供工厂的想法很不错。您只希望函数返回一个Promise,而不必传递回调。像这样:
angular.module('products', [])
.factory('products', function($http) {
var products = {};
products.get = function(params) {
return $http.get('/php/products.php', {params: {page: params.page}});
};
return products;
});
angular.module('app', ['products'])
.controller('productsCtrl', function ($scope, products){
$scope.page = 1;
$scope.products=[];
products.get({page: $scope.page}).then(function (response) {
for (var i = 0; i < response.data.length; i++) {
$scope.products.push(data[i]);
}
}, function(errorResponse) {
//any error handling
})
});
有关承诺的更多信息,请参见$q service。事情变得非常混乱,传递回调。承诺就是要走的路。
关于javascript - 设计系统以从后端访问JSON提要,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27258434/