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');
}
});
}
})();