如何使用 Angular.js 进行重定向?

Posted

技术标签:

【中文标题】如何使用 Angular.js 进行重定向?【英文标题】:how can I make a redirection with Angular.js? 【发布时间】:2013-04-18 16:32:58 【问题描述】:

我想重定向到另一个路由,页面必须刷新并在服务器端处理,所以$location.path(url) 帮不了我。我试过window.location(url),但我有这个错误:window.location is not a function

我的 app.js:

    'use strict';
var app = angular.module('myApp', []).
  config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) 
    $routeProvider.when('/', 
        templateUrl: 'partials/index');
    $routeProvider.when('/logout', 
        controller: 'logoutCtrl');
    $routeProvider.otherwise(
        redirectTo: '/');
    $locationProvider.html5Mode(true);
  ]);

我的注销Ctrl:

function logoutCtrl($scope, $location)
    $apply(function()  
        $location.path("/users/logout"); 
    );

部分/索引包含此链接:

a(href='/logout') Logout

现在我将展示如何使用 Express.js 管理我的路由服务器端:

app.get('/', ctrl.index);
app.get('/partials/:name', ctrl.partials);
app.get('/users/logout', ctrl.logout);

exports.logout = function(req, res)

  console.log('logout');
  req.session.destroy(function(err) // I destroy my session
   res.redirect('/'); // redirection to '/'
  );

现在,当我点击“注销”时,什么也没有发生,我只是在我的栏中看到这条路线localhost:3000/logout,但如果我输入localhost:3000/users/logout,我会得到预期的结果(会话被破坏并重定向到'/')

【问题讨论】:

【参考方案1】:

通过不工作代码的示例将很容易回答这个问题,但是有了这个 > 信息,我认为最好的信息是您在 > angularjs 摘要之外调用 $location.path。

尝试在指令scope.$apply(function() $location.path("/route"););"上执行此操作

-Renan Tomal Fernandes

【讨论】:

它对我不起作用。我将把我的代码添加到我之前的帖子中:) 它的$scope.$applyscope.$apply【参考方案2】:

随你去吧:

window.location.assign(url);

或者:

window.location.replace(url);

不会将当前页面保存在浏览器会话历史记录中。

【讨论】:

这个问题是在 AngularJS 的上下文中提出的。绝不建议在 Angular 中使用非 Angular 服务,例如$window 是 Angular 服务。有很多原因在这里可能无关紧要。 感谢您的讲座。用 $window 替换 window ,答案仍然有效。

以上是关于如何使用 Angular.js 进行重定向?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止在Angular Js1.2中重定向<a href="#something">

使用 grunt 服务器,如何将所有请求重定向到根 url?

Angular:手动重定向到路由

如何使输入类型=按钮像超链接一样使用获取请求进行重定向? [复制]

通过Vuejs调用时如何使Nodejs重定向工作

如何使Javascript文件301重定向?