2016-08-05 3 views
0

Je suis en train d'implémenter une directive AngularJS sur Angular 1.4.12 en utilisant les controllerAs et bindToController "pattern" afin d'avoir un contrôleur propre qui ne le fasse pas t dépend de $ scope. Cependant, je trouve toujours difficile de se débarrasser de la portée de $ sur ces lignes:

$scope.$on('$destroy', function() {...}); 
$scope.$on('$stateChangeSuccess', function() {}); 

Toute idée comment gérer ce cas?

Merci

+1

Copie possible de http://stackoverflow.com/questions/28344131/using-watch-without-scope-controller-as-syntax –

+0

I lire que les hooks de cycle de vie ont été introduits dans Angular 1.5.x. Probablement c'est ce que je cherche. https://docs.angularjs.org/api/ng/service/$compile. Malheureusement, je ne peux pas mettre à jour mon projet à AngularJS 1.5.x – gabric

+0

les crochets de cycle de vie ne sont actuellement disponibles que pour les composants – svarog

Répondre

5

L'idée derrière ne pas utiliser la portée de $ est à:

  • ne polluera pas le code HTML avec des variables qui ont pas de contexte et potentiellement des noms de variables contradictoires dans la même portée.

    ng modèle = "nom" VS ng modèle = "userController.user.name"

  • pas vous polluez code javascript en faisant précéder toutes les fonctions variables et avec une portée de $

Si vous avez besoin de diffuser des événements ou de regarder les changements, il est parfaitement possible d'utiliser $ scope (surtout si vous n'avez pas d'alternative comme .components en angulaire 1.5)

Voir $scope comme un service fourni par Angular comme $window ou $state. Si vous en avez besoin, vous pouvez l'utiliser. (mais n'allez pas et mettez le code dedans là, même si vous pouvez)

+2

Vous êtes sur. Le seul ajout que je ferais est que le nouveau ui.Router déprécie l'événement $ stateChangeSuccess en faveur d'un hook d'abonnement onSuccess: https://ui-router.github.io/docs/latest/classes/transition.transitionservice.html# onsuccess – Martin

+0

Merci de signaler la dépréciation. Malheureusement, nous utilisons actuellement ui-router v 0.2.15 qui n'offre pas la possibilité de se brancher sur onSuccess – gabric