AngularJS: en Utilisant le même contrôleur à plusieurs reprises sur une vue

Je suis fouiller dans Angularjs et a obtenu au point où j'en suis dans mon application au-delà de la simple liste de choses à faire stades.

Un scénario que j'ai, qui doit être commun, c'est d'avoir un contrôleur qui doit être partagée à travers de multiples domaines sur mon point de vue.

Dans mon cas, j'ai un profileController qui je veux utiliser pour obtenir le profil de l'utilisateur à partir du serveur sur chaque charge.

Lors de l'appel de la loadUserProfile de l'intérieur de la profileController j'ai vu qu'il a été appelé 'n'fois (pour le nombre de fois que j'ai référencé le contrôleur de la vue), ce qui est cool, j'ai donc changé le profileController de simplement exposer des variables telles que userProfile et isAuthenticated qui simplement les références des variables que j'ai mis dans le $rootScope. Ces variables sont définies dans un contrôleur qui est chargée qu'une seule fois par page déclarées sur ma <body data-ng-controller="baseController as vm">, cependant, cela ne semble pas fonctionner, et je me demande ce que je suis absent.

Donc obtenir les données à partir de la profileService, mais lors de la mise à jour de l' $rootScope variables, cela ne se reflète pas sur mon point de vue.

Ci-dessous est mon baseController:

(function () {
    'use strict';

    var controllerId = 'baseController';
    angular.module('app.controllers').controller(controllerId, ['$location', 'common', 'authClientSvc', 'profileService', '$rootScope', baseController]);

    function baseController($location, common, authClientSvc, profileService, $rootScope) {
        var getLogFn = common.logger.getLogFn;
        var log = getLogFn(controllerId);
        var vm = this;

        $rootScope.isAuthenticated = false;
        $rootScope.userProfile = {
            email: '',
            name: '',
            surname: ''
        };


        activate();

        function activate() {
            var promises = [getUserProfile()];
            common.activateController([promises], controllerId)
                .then(function () { log('Activated Secure View'); });
        }

        function getUserProfile() {
            profileService.getProfile('[email protected]').then(function (data) {
                setTimeout(function () {
                    $rootScope.$apply(function () {
                        $rootScope.userProfile = data;
                        $rootScope.isAuthenticated = authClientSvc.isAuthenticated()
                    })
                }, 1000);
            });
        }
    }
})();

Et mon profileController où j'expose le $rootScope variables ci-dessous:

(function () {
    'use strict';

    var controllerId = 'profileController';
    angular.module('app')
        .controller(controllerId, ['common', 'authClientSvc', 'profileService', '$rootScope', profileController]);

    function profileController(common, authClientSvc, profileService, $rootScope) {
        var getLogFn = common.logger.getLogFn;
        var log = getLogFn(controllerId);

        var vm = this;

        vm.logoutUrl = '/';

        vm.isAuthenticated = $rootScope.isAuthenticated;
        vm.profile = $rootScope.userProfile;

        activate();

        function activate() {
            var promises = [];
            common.activateController(promises, controllerId)
                .then(function () { log('Activated Profile controller'); });
        }

        vm.logOut = function () {
            authClientSvc.logout();
        }
    }
})();

Je ne suis pas sûr de ce qui est faux, parce que dans un violon, je peux clairement voir les données de revenir, et quand je le débogage et de mettre des messages de log dans le baseController après si obtient le profil, qu'il obtient en retour le droit de données, mais pour quelque raison il ne fonctionne pas sur mes éléments. Ci-dessous est un échantillon de la façon dont je l'utilise sur la vue:

<div class="login-info" data-ng-controller="profileController as vm">
    <span ng-switch="vm.isAuthenticated">
        <a ng-switch-when="true" href="javascript:void(0);" id="show-shortcut" data-action="toggleShortcut">
            <img src="/Content/img/avatars/male.png" alt="me" class="online" />
            <span data-localize="{{vm.profile.name}}.{{vm.profile.surname}}">
                {{vm.profile.name}}.{{vm.profile.surname}}
            </span>
            <i class="fa fa-angle-down"></i>
        </a>
        <span ng-switch-when="false">
            <img src="/Content/img/avatars/male.png" alt="guest" class="online" />
            <span data-localize="Guest.user">
                Guest User
            </span>
        </span>
    </span>
</div>

Toute aide serait grandement appréciée, ou même des suggestions sur la façon d'atteindre cet objectif dans une meilleure façon.

Grâce.

InformationsquelleAutor Ryk | 2014-09-09