angular$ locationChangeStart没有得到正确的调用,是什么?

我正在开发基于Brian Ford在GitHub上的angular-express-blog应用程序的MEAN应用程序。

我遇到的问题是,我需要能够在$ locationChangeStart上调用我的UserService服务,以检查是否有用户login。 我看到的大部分示例都是在模块声明中设置$rootScope.$on('$locationChangeStart'...这不允许我访问我的自定义服务,所以我的解决scheme是把它放在一个控制器和调用它在我的主布局文件。

我已经设置好了,但应用程序什么都不做。 它甚至不会调用一个错误。 你们中的任何一个都可以发现这个代码的问题吗?

这是我的github 回购。

LayoutCtrl.js:

 angular.module('myApp'). controller('LayoutCtrl', function($scope, $http, UserService) { $scope.$on( "$locationChangeStart", function(event, next, current) { if ( UserService.getUser() === null ) { // no logged user, we should be going to #login if ( next.templateUrl == "partials/login.html" ) { // already going to #login, no redirect needed } else { // not going to #login, we should redirect now $location.path( "/login" ); } } }); }); 

Layout.jade:

 doctype html html(ng-app="myApp", ng-controller='LayoutCtrl') head meta(charset='utf8') base(href='/') title Angular Express Seed App link(rel='stylesheet', href='/css/app.css') body block body 

和UserService.js:

 angular.module('myApp'). service('UserService', function(){ var $scope = this; var user = null; $scope.user = {}; $scope.setUser = function(data){ user = data; }; $scope.getUser = function(){ $scope.user = user; }; return $scope; }); 

我不明白你的服务应该如何工作,你的getUser函数什么也没有返回(undefined)。

用这个代替:

 angular.module('myApp'). service('UserService', function(){ var user; this.setUser = function(data){ user = data; }; this.getUser = function(){ return user; }; }); 

所以你的问题是undefiend!== null

你正在检查这个:

  if ( UserService.getUser() === null ) 

如果你想检查是否是未定义的(或其他谬误值)使用这个:

  if ( ! UserService.getUser() ) 

你也应该注入$ location:

  controller('LayoutCtrl', function($scope, UserService, $location) { 

debugging

  • 使用console.log来检查你的应用程序的stream程
  • console.log(UserService.getUser()) # undefined

替代解决scheme与运行块:

 angular.module('myApp'). run(function($rootScope, UserService, $location) { $rootScope.$on( "$locationChangeStart", function(event, next, current) { }); });