2016-09-12 7 views
1

Ich weiß, wie zu verwenden, senden und Broadcast-Ereignis in $scope.

Meiner Meinung nach ist die Verwendung von $rootScope ist im Wesentlichen ähnlich wie $ Umfang außer $rootScope.$emit wird nur ein Ereignis für alle $rootScope.$on Zuhörer Feuer, $rootScope.$broadcast werden alle $rootScope.$on sowie $scope.$on Zuhörer mit.

Allerdings bin ich zu einem Tutorial-Code verwirrt, die nur $rootScope.$on durch das gesamte Projekt verwenden. Mit diesem Projekt können Benutzer auf eine andere Seite umleiten und ihren Cookie verwenden, um den Anmeldestatus zu gewährleisten.

Ich finde keine Ahnung, wo es emit() oder broadcast() ruft, um Ereignis von einem Listener auszulösen. Fungiert emit() oder broadcast() im Projekt oder braucht es überhaupt nicht? Kann jemand den Login hinter diesem Phänomen erklären? In welchen Fällen benötigt $rootScope nicht emit() oder broadcast()? Hier

ist Teilcode:

(function() { 
    'use strict'; 

    angular 
     .module('app', ['ngRoute', 'ngCookies']) 
     .config(config) 
     .run(run); 

    config.$inject = ['$routeProvider', '$locationProvider']; 
    function config($routeProvider, $locationProvider) { 
     $routeProvider 
      .when('/', { 
       controller: 'HomeController', 
       templateUrl: 'home/home.view.html', 
       controllerAs: 'vm' 
      }) 

      .when('/login', { 
       controller: 'LoginController', 
       templateUrl: 'login/login.view.html', 
       controllerAs: 'vm' 
      }) 

      .when('/register', { 
       controller: 'RegisterController', 
       templateUrl: 'register/register.view.html', 
       controllerAs: 'vm' 
      }) 

      .otherwise({ redirectTo: '/login' }); 
    } 

    run.$inject = ['$rootScope', '$location', '$cookieStore', '$http']; 
    function run($rootScope, $location, $cookieStore, $http) { 
     // keep user logged in after page refresh 
     $rootScope.globals = $cookieStore.get('globals') || {}; 
     if ($rootScope.globals.currentUser) { 
      $http.defaults.headers.common['Authorization'] = 'Basic ' + $rootScope.globals.currentUser.authdata; // jshint ignore:line 
     } 

     $rootScope.$on('$locationChangeStart', function (event, next, current) { 
      // redirect to login page if not logged in and trying to access a restricted page 
      var restrictedPage = $.inArray($location.path(), ['/login', '/register']) === -1; 
      var loggedIn = $rootScope.globals.currentUser; 
      if (restrictedPage && !loggedIn) { 
       $location.path('/login'); 
      } 
     }); 
    } 

})(); 

Antwort

Verwandte Themen