1
我知道如何在$scope
上使用,發射和廣播事件。
在我看來,使用$rootScope
主要是類似於$範圍除了$rootScope.$emit
將火爲$rootScope.$on
監聽的事件而已,$rootScope.$broadcast
會通知所有$rootScope.$on
以及$scope.$on
聽衆。
但是,我很困惑於一個教程代碼,它只在整個項目中使用$rootScope.$on
。該項目允許用戶路由到不同的頁面並使用他們的cookie來確保登錄狀態。
我沒有找到任何線索,它叫emit()
或broadcast()
從監聽器觸發事件。 emit()
或broadcast()
是否在項目中啓動,或者根本不需要它?任何人都可以解釋這種現象背後的登錄?在什麼情況下,$rootScope
不需要emit()
或broadcast()
?
這裏是部分代碼:
(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');
}
});
}
})();