Ich versuche im Grunde zu lernen, wie man Funktionen von einem Controller in einem anderen verwendet. Freigabe zwischen den Controllern Ich habe einen Controller ShopCartCtrl
mit 3 Funktionen innerhalb (openViewCart, goToCheckout, in der Nähe)Platzieren Sie Funktionen vom Controller in einem Service und verwenden Sie diese Funktionen von einem anderen Controller
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();
}
}
]);
Ich habe einen Dienst:
creamShopServices.factory('ShoppingCart', [
function() {
return {
openViewCart: null,
goToCheckout: null,
close: null
}
}
]);
Und ich möchte diese drei Funktionen in einem anderen Controller IceCreamCtrl
nennen
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
}
}
]);
Aber ich bekomme immer, dass ShoppingCart.openViewCart keine Funktion ist. Ich denke, ich habe etwas falsch eingerichtet, aber ich kann nicht herausfinden, was. Wie stelle ich die Funktionen vom ersten Controller in den Dienst richtig und wie rufe ich es richtig vom zweiten Controller?
Warum definieren Sie die Funktionen des Dienstes in der ersten Steuerung, anstatt sie im Dienst zu definieren? –
Nehmen wir an, Sie hätten in ShopCartCtrl oder den von Ihnen benötigten Variablen Hilfsfunktionen, und Sie möchten nur die Funktion vom Dienst referenzieren können, anstatt sie im Service zu definieren. Wie würdest du das machen? – truffle
@RomainVincent nein, du wirst nicht. AngularJS-Dienste sind Singletons. –