Ui-router:如何阻止网址导航但接受状态导航

时间:2014-11-20 10:30:00

标签: angularjs angular-ui-router

我尝试做一些接受状态导航的功能(使用$ state.go(otherState)),刷新地址/网址栏中的关联网址,但是如果用户直接放置,它会阻止(或重定向到不允许的网页)这个网址在地址/网址栏中。

可以通过ui-router模块或ui-router模块中的某些内容来完成吗?

我把示例代码:

$stateProvider.state("main", {
  url: "/index.html",
  templateUrl: "main.html"
}).state("notAccessibleScreenByBar", {
  url: "/private/example.html",
  templateUrl: "example.html"
});

从主视图(index.html)开始,将执行下一个角度代码:

$state.go("notAccessibleScreenByBar");

此操作会更改视图,加载example.html并将网址栏刷新为/private/example.html。

如果用户将/private/example.html放入地址/网址栏,则ui-router必须阻止此请求(或重定向到不允许的网页)。

1 个答案:

答案 0 :(得分:0)

您尝试做的事情似乎与任何网络身份验证标准非常相似,但是,如果您不想这样做,可以使用$locationChangeSuccessdocs here

this sample启发的基本示例:

$rootScope.$on('$locationChangeSuccess', function(e, newUrl, oldUrl) {

    // Prevent $urlRouter's default handler from firing
    e.preventDefault();

    if(isThisTransitionValid(newUrl, oldUrl)) {
      // Ok, let's go
      $urlRouter.sync();
    });
  });