我基本上是试图学习如何使用另一个控制器中的功能。控制器之间共享。我有一个控制器内ShopCartCtrl
有3种功能(openViewCart,goToCheckout,接近)从控制器的功能放置在一个服务和使用这些功能从另一个控制器
creamShopControllers.controller('ShopCartCtrl', ['$scope', '$state', '$uibModal', 'ngCart', '$http', '$uibModalInstance', 'ShoppingCart',
function ShopCartCtrl($scope, $state, $uibModal, ngCart, $http, $uibModalInstance, ShoppingCart) {
console.log("Hitting ShopCartCtrl!");
ngCart.setTaxRate(7.5);
ngCart.setShipping(2.99);
ShoppingCart.openViewCart = function() {
$uibModal.open({
templateUrl: 'pages/shopping_cart_modal.html',
clickOutsideToClose: true,
})
}
ShoppingCart.goToCheckout = function() {
$state.go('checkout', {});
}
ShoppingCart.close = function() {
$uibModalInstance.close();
}
}
]);
我有一个服务:
creamShopServices.factory('ShoppingCart', [
function() {
return {
openViewCart: null,
goToCheckout: null,
close: null
}
}
]);
而且我想打电话给这3个功能叫做IceCreamCtrl
creamShopControllers.controller('IceCreamCtrl', ['$scope', '$state', 'ShoppingCart', 'IceCream', 'AllIceCreams',
function ($scope, $state, ShoppingCart, IceCream, AllIceCreams) {
AllIceCreams.get({}, function (result) {
console.log("Fetched all ice cream");
$scope.allIceCream = result;
}, function (err) {
console.log("Error on GET All Ice Cream")
});
$scope.viewCart = function(){
ShoppingCart.openViewCart(); //TYPEERROR: ShoppingCart.openViewCart is not a function
}
}
]);
但我总是得到ShoppingCart.openViewCart不是一个函数。我想我可能已经错误地设置了一些东西,但我无法弄清楚什么。我如何正确地将第一个控制器的功能设置到服务中,以及如何从第二个控制器正确地调用它?
为什么在第一个控制器中定义服务的功能,而不是在服务中定义它们? –
假设您在ShopCartCtrl中有助手函数或您需要的变量,所以您只希望能够从服务中引用该函数,而不是在服务中定义它。你会怎么做? – truffle
@RomainVincent不,你不会。 AngularJS服务是单身人士。 –