angularjs中的重定向

时间:2014-09-01 17:42:26

标签: javascript angularjs redirect

我正在为项目使用角度js,我有一个登录页面,从成功登录后,用户被重定向到主页。截至目前,我正在使用此代码重定向

request.success(function(data){
              $scope.response=data;
              NProgress.done();
              window.location.href = "/app/home.html";
             //$location.path('/homepage').replace();
        });

但是这种方法的问题是浏览器中的网址显示 /app/home.html#/feed ,这看起来不太好。我希望这通过angularprovider以角度来实现,但它不起作用。 我当前的app.js文件看起来像这样

config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
$routeProvider.when('/feed', {templateUrl: 'partials/home/feed.html'});
$routeProvider.when('/profile', {templateUrl: 'partials/home/profile2.html'});
//  $routeProvider.when('/homepage', {templateUrl: '#/home.html'});
$routeProvider.otherwise({redirectTo: '/feed'});

我希望broswer中的网址看起来像 app / homepage / feed 使用$ location,因为我在评论中尝试过。知道我怎么能这样做吗?

2 个答案:

答案 0 :(得分:0)

功能$locationProvider.html5Mode(boolean)是您所需要的 只需执行$locationProvider.html5Mode(true),您就不应再看到任何#

它位于文档的this page

答案 1 :(得分:0)

如果您不使用服务器端语言/路由,则只使用angularJs。然后简单地添加它以从角度完全删除#tag。

angular.module('myApp', ['ngRoute'])
    .config(['$locationProvider', function($locationProvider) {
    $locationProvider.html5Mode(true);
}]);

但是如果你使用服务器端语言,那么你将不得不创建一个全能路由,以便任何未在服务器端专门路由的路由将传递给angular routes。我在这里使用express server作为后端捕获后端未提及的路由。我假设您使用的是express.js:

app.get('*', function(req, res) {
res.render('index');
});

整体而言,您的服务器代码将如下所示:

var express = require('express'),
app = module.exports = express();
app.engine('.html', require('ejs').__express);
app.set('views', __dirname + "/views");
app.set('view engine', 'html');
app.use(express.static(__dirname + "/public"));
app.get('*', function(req, res) {
res.render('index');
});

详情请使用this链接