2016-07-20 2 views
1

Disons que j'ai deux vues qui partagent un contrôleur. Les deux vues utilisent le ng-route service. Si une variable de portée est modifiée dans une vue, puis que vous passez à la deuxième vue, pourquoi la deuxième vue ne se met-elle pas à jour?

Example: Mon contrôleur a une variable qui correspond à "hello". Je génère cette variable très bien dans les deux vues. En view one j'ai un onclick qui met à jour la variable pour dire "Whatsup". Cela fonctionne bien, mais après l'événement, je change de vue et la deuxième vue est sortie "hello" encore. Y a-t-il un moyen de les partager? Si non, alors qu'est-ce qu'une technique pour partager des données?

+0

un peu de code ici, ou jsFiddle – neuronet

+0

@neuronet ce violon montre à la fois mon code angulaire et les deux vues https://jsfiddle.net/t2ouuw72/ – nj51

+0

@ nj51: bon moyen de partager des données dans AngularJS est l'utilisation de modèles. Vous pouvez stocker votre information de variable dans les modèles, et le refléter un autre endroit chaque fois que nécessaire :) –

Répondre

0

Je voudrais que vous sachiez que AngularJS est conçu pour SINGLE PAGE APPLICATIONS (SPA) donc ce comportement n'est pas supporté par le framework.

Chaque vue a un scope différent même si elles partagent le même contrôleur. Ainsi, la mise à jour d'une variable de portée pour une vue ne mettra pas à jour l'autre.

Si vous voulez ce comportement, je suggère d'utiliser $on pour écouter les événements.

Aussi, sur votre code vous avez $scope.test = 'hi'; qui est codé en dur sur votre contrôleur sans conditions ou quoi que ce soit, c'est pourquoi il reflète sur vos deux points de vue qui partagent le même contrôleur.

+0

Oh, d'accord. J'étais confus parce que beaucoup de ces applications ont des points de vue différents qui donnent l'impression que c'est plus d'une page. Mon projet allait être une application pour aider les employés à prendre différentes équipes. Les deux pages principales étaient 1. Un endroit pour montrer les quarts disponibles au choix 2. Une page qui montre les changements qu'un utilisateur a choisis Est-ce quelque chose d'angulaire serait mauvais pour? – nj51

+0

Non, angulaire travaillera pour vous. Vous pourriez être confus sur ce qu'est SPA, voir la définition [ici] (http://stackoverflow.com/a/19501759/6138713). Longue histoire courte, si vous voulez mettre à jour une autre vue (page) ou contrôleur, utilisez '$ broadcast' et' $ on'. –

0

La meilleure pratique consiste à avoir une vue par contrôleur. Lorsque votre site évolue, il devient très difficile de gérer plusieurs modèles/vues avec un seul contrôleur.

Un service est le moyen de partager des données entre les contrôleurs. Pour votre exemple, vous pourriez avoir une fonction d'activation qui est appelée quand chaque vue est rendue qui obtient la variable mise à jour du service que vous injectez. Votre fonction sur lick devrait enregistrer la variable dans le service pour la rendre disponible sur tous les contrôleurs.