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) { }); });