我正在重写一些角度代码的过程,因为事情不清楚且记录不清。
我有许多以JSON形式返回的数据Feed。例如,我有一个产品供稿,但也有其他供稿,如天气和新闻等。
我对角度很陌生,所以我想检查一下我的想法是否足够好还是可以改进。
我打算为每个数据Feed添加factory
,以便在整个应用中多次访问它们。然后,任何指令或控制器都可以与相关模块相关联,因此对于产品供稿我会有这样的事情:
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]);
}
})
});
这意味着如果我需要在不同的控制器中提供产品,我可以轻松地做到这一点。例如,我可以在不同的控制器中购买最后三个产品,并修改传递给后端的参数。
答案 0 :(得分:1)
这对我来说足够了。如果你有一个更强大的API可以使用(也许是完整的CRUD),那么ngResource可能更合适,但我认为你很好。
答案 1 :(得分:1)
背后的想法有一个工厂,这些请求是一个很好的。你只希望你的函数返回一个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。传递回调的事情变得相当混乱。承诺是可行的。