我理解如何在控制器中使用Restangular,但我的想法是Restangular基本上是类固醇的ORM。
ORM不应该知道应用程序的状态。这是控制器的工作。
我还想重新使用ORM查询,因此我相信Restangular应该在服务中使用。
我的问题是我是一个js / angularjs和restangular noob,只有大约2-3个月的exp,有任何前端。
我的控制器:
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
问题2:考虑到当Restangular提供这些方法时,我必须为每个工厂创建C-R-U-D的单独方法,我是否试图过度设计?
答案 0 :(得分:3)
我知道这是旧的,但另一种方法就是将它包装在一个函数中。这样,您可以在服务/方法中保留任何其他逻辑。
app.factory('Supplier', ['Restangular', function (Restangular) {
return {
getAll: Restangular.all('supplier').getList(),
getOne: function(supplierId) {
return Restangular.one('supplier', supplierId).get()
}
};
}]);
答案 1 :(得分:2)
在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;
}]);