Angular routeProvider,如果我已经在该视图上,我怎么能不更新视图?

时间:2017-03-17 22:26:16

标签: javascript angularjs

所以,这是一个有点愚蠢的问题,但如果我在登录页面上,并且点击了一个进入登录页面的链接,我不希望routeProvider做任何事情。有没有办法做到这一点,这样做是个好主意吗?

一些代码:

app.config(function($routeProvider,$locationProvider) {

    //TODO: If already /login, do nothing
    $routeProvider.when('/login', {
        templateUrl: '../views/login.ejs',
        controller: 'loginController',
    });

    $routeProvider.when('/register', {
        templateUrl: '../views/register.ejs',
        controller: 'registerController',
    });

    $locationProvider.html5Mode(true);
});

我看到的一个潜在问题是,如果用户真的想要手动刷新页面,他将无法做到。

2 个答案:

答案 0 :(得分:0)

我相信你可以在你的主控制器中做这样的事情

angular.module(..).config(/* your routes */).run(function($rootScope) {
    $rootScope.$on('$locationChangeStart', function (event, newUrl, current) {
       // compare previous url to current one - if same, it is navigating to same page
       if (newUrl === current) 
         event.preventDefault(); // This prevents the navigation from happening
    });
});

请记住,这将适用于所有路线(我做了一些通用的),并且您正在比较完整的网址(我找不到只测试路线的方法)

如果您只希望/ login登录,那么只需将if子句修改为

即可
if(current.endsWith('/login))

如果您需要IE suppport(因为IE中不支持endsWith()),请使用

if (current.match("/login$"))

答案 1 :(得分:0)

执行以下操作:

Stopwatch