相关疑难解决方法(0)

$ location.path无法从http拦截器工作

这是你相当直接的设置,我有一个http拦截器正在寻找401s,如果发现用户被重定向到登录页面:

function($location, $q)
{
    return {
        request: function (config) {
            return config || $q.when(config);
        },
        requestError: function(request){
            return $q.reject(request);
        },
        response: function (response) {
            return response || $q.when(response);
        },
        responseError: function (response)
        {
            if (response && response.status === 401)
            {
                $location.path('/login');                    
            }

            return $q.reject(response);
        }
    };

}
Run Code Online (Sandbox Code Playgroud)

问题是$location.path('/login')呼叫似乎不起作用,路径完全被忽略,我仍然在我的会话到期时我在路上(尽管是空白页).一种可能的解决方法是使用传统方法,window.location = '/#!/login';但我发现这不太理想.我还发现,如果我删除该return $q.reject(response);行,我得到它的工作,但这引入了另一个错误,其中无法找到响应的数据属性(此处讨论的解决方案:Angular.js $ http.post TypeError:无法读取未定义的属性'data') .

我正在跑角1.2.21.

关于可能会发生什么的任何想法?回到window.location不是世界的尽头,但我喜欢这个神秘的一个很好的整洁解决方案:).

提前致谢.

angularjs

6
推荐指数
1
解决办法
2711
查看次数

AngularJS $ location.path在Parse Promise上不起作用

我的parse / AngularJS应用程序正在使用Promises。在登录功能是假设重定向与用户$ location.path,但我不得不调整它,使其根据该岗位工作:

在AngularJS中$ location.path不会在工厂中更改

根据这一SO用户,你需要将调用替换到$ location.path

$rootScope.$apply( function(){$location.path('/somelocatin'); } );
Run Code Online (Sandbox Code Playgroud)

在这里查看答案:https : //stackoverflow.com/a/19738154/1743693

这解决了问题,但我必须了解:为什么本地电话不起作用?调整如何解决该问题?我怎么知道我没有搞乱AngularJS周期?还是与Promise模式的Parse实现更相关?

这是登录代码:

    function login() {
        vm.dataLoading = true;
        var response = AuthenticationService.Login(vm.email, vm.password).then(
            function (user) {
                vm.dataLoading = false;
                //$location.path('/'); -- <-- **doesn't work**
                vm.user = Parse.User.current().getEmail();
                $rootScope.$apply(function () { $location.path('/'); });
            },
            function () {
                $rootScope.$apply(function () { $location.path('/login'); });
                FlashService.Error(response.message);
                vm.dataLoading = false;
            });
    };
Run Code Online (Sandbox Code Playgroud)

和身份验证服务的实现:

    function Login(username, password, success, error) {

        return Parse.User.logIn(username, …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs parse-platform

1
推荐指数
1
解决办法
707
查看次数

标签 统计

angularjs ×2

javascript ×1

parse-platform ×1