5

我正在尝试使用 angular 和 nodejs 构建和 web。我在包含登录和注册表单的/home路径上加载 Angular。/这是我的角度配置:

window.app.config(['$routeProvider', '$locationProvider',
    function($routeProvider,$locationProvider) {
        $locationProvider.html5Mode(true);
        $locationProvider.hashPrefix('!');
        $routeProvider.
        when('/profile', {
            templateUrl: '/views/account.html',

        }).
        when('/edit', {
            templateUrl: '/views/edit.html',

        }).
        when('/home', {
            templateUrl: 'views/index.html'
        }).
        when('/signout', {
            templateUrl: 'views/signout.html'
            //on this view i load a controller which submits a form to /signout
        }).

        otherwise({
            redirectTo: '/home'
        });
    }
]);

在服务器端路由:

    app.get('/',function(){
          res.render('index',{
             user: req.user? req.user:'guest'
        });
    });
    app.post('/login',function(){
             //if success redirect to /home
             //if fails redirect to /
    });
    app.get('/auth/facebook', passport.authenticate('facebook', { scope: [ 'email',                  'user_about_me', 'read_stream', 'publish_actions'], failureRedirect: '/' }));
  app.get('/auth/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/' }), users.authCallback);
    app.get('/signout',function(){
             //signing out the user here...and redirects to /
    });
    app.get('/home',function(req,res){
        res.render('users/home',{
          user: req.user? req.user:'guest',
          message: req.flash('error')

        })
      }); 
    app.get('/profile',function(req,res){
        res.render('users/home',{
          user: req.user? req.user: 'guest',
          message: req.flash('error')

        })
      });
      app.get('/edit',function(req,res){
        res.render('users/home',{
          user: req.user? req.user:'guest',
          message: req.flash('error')

        })
      });

如果我点击facebook auth它发送给我,我如何通过点击 url/home上的链接发送请求,/auth/facebook因为 Angular 路由。Angular 阻止向服务器发送请求,它只是转到 url ,我尝试通过替换来删除. 结果是一样的,只是那里没有加载视图。/home/home/home/

4

2 回答 2

14

文档

在以下情况下,链接不会被重写;相反,浏览器将对原始链接执行完整的页面重新加载。

  • 包含目标元素的链接。例子:<a href="/ext/link?a=b" target="_self">link</a>

  • 指向不同域的绝对链接。例子:<a href="http://angularjs.org/">link</a>

  • 以“/”开头的链接在定义 base 时会导致不同的基本路径。例子:<a href="/not-my-base/link">link</a>

因此,作为最简单的解决方案,只需添加target="_self"到您的链接。

于 2013-11-08T12:23:54.783 回答
3

如果您希望在一个地方更改路由配置而不是更改所有链接元素,您可以这样做:

$routeProvider.when('/externalpath', { resolve: {
    redirect: ['$location', function($location) {
        window.location.replace($location.absUrl());
    }]
}});

每当点击到该路由的链接时,这基本上都会调用内联函数,并且该函数只是将浏览器重定向到目标位置(角度之外)。无论是否为路由配置了模板或控制器,都会处理“解析”配置,并且“重定向”名称基本上只是一个虚拟名称 - 重要的是该函数被执行以获取其值(未使用在这种情况下)。

这在例如您有一个需要访问服务器的 /signout url 时也很有用。如果您希望所有未配置的路径都由服务器处理,您也可以使用 else() 配置而不是 when()。

于 2014-08-19T16:10:43.600 回答