web-dev-qa-db-fra.com

Meilleures pratiques Angular.js - Extension des contrôleurs, remplacement des valeurs par défaut des contrôleurs

Voici un problème réel Angular Je ne peux pas envelopper ma tête. J'adore Angular, mais ce problème me dérange beaucoup en ce moment.

Quelle est la meilleure pratique pour étendre les fonctions d'un contrôleur existant et utiliser le contrôleur étendu sur une autre page de mon application? En d'autres termes: Comment faire l'héritage du contrôleur dans Angular?

Edited out - 23/09/2014, ne pense pas que la description de mon cas d'utilisation d'origine aide les visiteurs à mieux comprendre ce que je recherche ici. Je pense que cela détourne les gens du vrai problème.

23
Mihaly KR

Après six mois, je pense que je comprends parfaitement ce qui se passe. Comme il est souligné dans un commentaire à ce poste, la réponse la plus simple est les services.

Dans le cas le plus optimal, toutes vos variables d'étendue sont des valeurs recueillies auprès d'une usine/service. Néanmoins, vous voudrez peut-être utiliser exactement le même contrôleur avec une fonction supplémentaire: $ scope.someFunction () {}, et garder le reste. Dans ce cas, vous disposez d'une logique de contrôleur "mince", ce qui est la conception de contrôleur souhaitable - mais peut encore aboutir à une centaine de lignes de code ou plus. Vous ne voulez pas que cela soit dupliqué dans un autre contrôleur, simplement parce que vous avez besoin d'une logique de contrôleur supplémentaire (comme $ scope.someFunction ())

Que faites-vous alors?

La réponse est la suivante:

  1. Assurez-vous que vous avez tout fait pour résoudre la situation avec les usines
  2. si vous êtes absolument certain de l'avoir fait, optez pour l'injection du contrôleur:

    .controller('childController', function ($scope, $controller) {
      'use strict';
      $controller('parentController', {$scope: $scope});
      $scope.someFunction=function(){}
    })
    

C'est si simple. - encore une fois, généralement, les choses peuvent être résolues avec les usines ..

J'espère que cela vous sera utile;)

44
Mihaly KR