recherche

Maison  >  Questions et réponses  >  le corps du texte

angulaire.js - Contrôleur pour le routage angulaire

Deux pages peuvent-elles partager un contrôleur pendant le routage, comme

javascript    .state('a', {
        ...
        controller : 'aaaController'
    })
    .state('b', {
        ...
        controller : 'aaaController'
    })

Si oui, le contrôleur est-il une portée indépendante ou publique ? Par exemple, si je déclare une variable i dans le contrôleur et modifie la valeur de i dans la page a, lorsque je route vers b Lorsque le La page est ouverte, la valeur de i changera-t-elle en conséquence ?

PHP中文网PHP中文网2783 Il y a quelques jours824

répondre à tous(3)je répondrai

  • 伊谢尔伦

    伊谢尔伦2017-05-15 16:52:44

    J'apprends également angulairejs récemment Concernant le problème évoqué par l'affiche, je peux faire une démonstration simple :

    Il y a la structure html suivante, différentes vues, le même contrôleur

    <p ng-controller="MyCtrl">
        <button ng-click="change()">change to 3</button>
    </p>
    <p ng-controller="MyCtrl">
        <button ng-click="show()">show</button>
    </p>
    

    Partie du code du contrôleur :

     .controller('MyCtrl', function ($scope, $log) {
            $scope.num = 2;
            $scope.change = function () {
                $scope.num = 3;
            };
    
            $scope.show = function () {
                $log.info($scope.num);
            };
        });
    

    Cliquez d'abord sur le bouton Afficher, le résultat de sortie est le suivant :

    Cliquez ensuite sur le bouton Passer à 3 et cliquez à nouveau sur le bouton Afficher. Le résultat est le suivant :

    .

    Cette expérience montre que bien qu'il s'agisse du même contrôleur, les oscilloscopes sont en fait deux oscilloscopes totalement indépendants.
    La structure de portée est également en forme d'arborescence, correspondant à la structure dom. La structure html ci-dessus aura deux portées.
    Regardons un autre exemple évident :

     .controller('MyCtrl', function ($scope, $log) {
            $log.info('init scope...');
        });
    

    Regardez la console

    Le résultat est imprimé deux fois, indiquant que la méthode a été exécutée deux fois. Si la portée est partagée, elle ne sera pas exécutée deux fois.

    Pour résumer : vous déclarez une variable i dans le contrôleur et modifiez la valeur de i dans la page a. Lorsque vous accédez à la page b, la valeur de i ne changera pas

    .

    J'espère vous aider !

    répondre
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-15 16:52:44

    C'est bizarre de l'utiliser de cette façon, je ne sais pas si c'est faisable de l'utiliser de cette façon

    Personnellement, je pense que l'utilisation normale est :
    Une page, un contrôleur
    Si vous avez besoin de partager des variables et des méthodes entre contrôleurs, vous pouvez créer un service en angulaire pour stocker les variables et les méthodes dans différents contrôleurs, injectez simplement le service que nous avons écrit

    .

    La documentation officielle indique également clairement que le service est utilisé pour partager du code :
    Prestations
    Les services angulaires sont des objets substituables qui sont connectés ensemble à l'aide de l'injection de dépendances (DI). Vous pouvez utiliser des services pour organiser et partager du code dans votre application.

    https://docs.angularjs.org/guide/services

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-15 16:52:44

    Après avoir changé d'itinéraire, le cycle de vie du contrôleur est terminé et le $scope actuel et les sous-portées sont morts.
    Si vous devez partager des données entre plusieurs contrôleurs, vous pouvez utiliser des services.

    répondre
    0
  • Annulerrépondre