AngularJs: passage de $portée variable avec le service
J'ai deux contrôleurs et dans l'un d'eux j'ai déclaré un $portée variable que je voudrais visible dans le deuxième contrôleur.
Premier contrôleur
app.controller('Ctrl1', function ($scope) {
$scope.variable1 = "One";
});
Deuxième Contrôleur
app.controller('Ctrl2', function ($scope, share) {
console.log("shared variable " + share.getVariable());
});
J'ai fait des recherches le meilleur Angulaire de l'approche et j'ai trouvé l'utilisation du service. J'ai donc ajouté un service pour Ctrl1
Service
.service('share', function ($scope) {
return {
getVariable: function () {
return $scope.variable1;
}
};
});
Ce code renvoie cette erreur:
Unknown provider: $scopeProvider <- $scope <- share
Donc ma question est: est-ce possible de partager $portée variable entre les contrôleurs? N'est pas la meilleure solution Angulaire ou je suis absent quelque chose?
Désolé pour ma question triviale mais je suis Angulaire débutant.
Merci d'avance
Ce qui concerne
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas injecter
$scope
dépendance en service de l'usine de fonction.Fondamentalement partageable service doit maintenir à partager des données dans un objet.
Service
Contrôleur
Oui, il est possible de partager la portée des variables entre les contrôleurs à travers des services et de l'usine.Mais, le montant de la portée des variables locales au contrôleur de lui-même et il n'y a aucun moyen pour le service à savoir sur cette variable.Je préfère utiliser de l'usine, facile et lisse comme du beurre. Si vous utilisez le service de l'usine dans un fichier distinct, vous devez inclure le fichier dans index.html
Votre essai avec le service très bon, mais vous ne devriez pas essayer d'utiliser $champ d'application de l'injection de dépendance dans le code de service. Le Service est destiné à être un fournisseur de données pour vous, alors si vous voulez partager des données entre les 2 contrôleurs, vous devez faire de la place pour ces données dans votre service
C'est le plus large de la description de cette solution:
https://stackoverflow.com/a/21920241/4772988
Meilleure façon est vraiment à l'aide de services. Les Services ont uniquement accès à
$rootScope
, ils n'ont pas leur propre$scope
.Cependant, vous ne devriez pas utiliser des étendues pour cette tâche. Il suffit de faire un service avec une partie variable partagée en dehors de toute étendues.
Tout d'abord, votre service doit être comme ceci:
Pour définir la valeur de la variable partagée passer la valeur de la fonction que nous avons créé sur le service
Pour obtenir la valeur de la variable partagée également utiliser la fonction dans le service sans passer une valeur
Mise à jour: à l'Aide de $rootScope est considéré comme une mauvaise pratique.
Ce que vous avez besoin est la
$rootScope
. Le$scope
est juste pour un contrôleur. Voici un exemple:service
.