基本的に、あるコントローラの機能を別のコントローラに使用する方法を学びます。コントローラ間の共有。コントローラの機能をサービス内に配置し、別のコントローラの機能を使用する
creamShopServices.factory('ShoppingCart', [
function() {
return {
openViewCart: null,
goToCheckout: null,
close: null
}
}
]);
そして、私はIceCreamCtrl
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();
}
}
]);
とコントローラShopCartCtrl
を持っています
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サービスはシングルトンです。 –