[英]AngularJS - Consuming REST API with Restangular in a factory
我知道如何在控制器中使用Restangular,但是我的想法是Restangular本質上是類固醇的ORM。
ORM不應了解應用程序的狀態。 那就是控制器的工作。
我還想重用對ORM的查詢,因此,我相信Restangular應該在服務內部使用。
我的問題是我是一個js / angularjs和restangular noob,只有大約2-3個月的經驗與任何前端。
我的控制器:
app.controller('AdminSupplierIndexController',
['$scope', '$stateParams', '$state', 'Supplier',
function ($scope, $stateParams, $state, Supplier) {
$state.reload();
Supplier.getAll.then(function (suppliers) {
$scope.suppliers = suppliers;
});
}]);
app.controller('AdminSupplierDetailController',
['$scope', '$stateParams', 'Supplier',
function ($scope, $stateParams, Supplier) {
Supplier.getOne({ supplierId : $stateParams.supplierID}).then(function(supplier) {
$scope.supplier = supplier;
});
}]);
我的工廠
app.factory('Supplier', ['Restangular', function (Restangular) {
return {
getAll: Restangular.all('supplier').getList(),
getOne: Restangular.one('supplier', supplierId).get()
};
}]);
我的Supplier.getAll
方法可以正常工作-我可以列出供應商工廠中的所有供應商。 我的問題是我的Supplier.getOne
方法。
問題1:如何將SupplierId注入工廠? 我收到ReferenceError: supplierId is not defined
providerId問題2:我是否正在考慮過度設計某些事情,因為當Restangular已提供這些方法時,我必須為每個工廠創建CRUD的單獨方法?
我知道這很舊,但是另一種方法是將其包裝在函數中。 這樣,您可以在服務/方法中保留任何其他邏輯。
app.factory('Supplier', ['Restangular', function (Restangular) {
return {
getAll: Restangular.all('supplier').getList(),
getOne: function(supplierId) {
return Restangular.one('supplier', supplierId).get()
}
};
}]);
在https://github.com/mgonto/restangular#decoupled-restangular-service中找到了解決方案
本質上,我解決此問題的方法如下:
app.js
$stateProvider
...
.state('admin.supplier', {
url : "/supplier",
templateUrl : 'templates/admin/supplier/index.html',
controller: "AdminSupplierIndexController",
resolve: {
suppliers: ['Supplier', function(Supplier) {
return Supplier.getList();
}]
}
})
.state('admin.supplier.detail', {
url : "/:supplierId",
templateUrl : "templates/admin/supplier/detail.html",
controller: "AdminSupplierDetailController",
resolve: {
supplier : ['Supplier', '$stateParams', function(Supplier, $stateParams) {
return Supplier.one($stateParams.supplierId).get();
}]
}
})
...
Supplier.js
app.factory('Supplier', ['Restangular', function(Restangular) {
return Restangular.service('supplier');
}]);
SupplierControllers.js
app.controller('AdminSupplierIndexController', ['$scope', '$stateParams', '$state', 'suppliers',
function ($scope, $stateParams, $state, suppliers) {
$state.reload();
$scope.suppliers = suppliers;
}]);
app.controller('AdminSupplierDetailController', ['$scope', 'supplier',
function ($scope, supplier) {
$scope.supplier = supplier;
}]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.