UI路由器更改状态而不更改url

klmdb

有人知道如何在不更改url的情况下更改ui-router状态吗?如下代码所示;在某些情况下,需要将用户重定向到403或401状态。我希望能够执行此重定向而无需更改url。

问候,klmdb

// make sure authGetCurrent has ran before routing starts
$rootScope.$on("$locationChangeSuccess", function(event, next) {

    event.preventDefault();

    AuthService.loadCurrentAuth().then(function(){

        $urlRouter.sync();
    }, function(){

        console.log("BIG ERROR!!!");
    });
});
// Configures $urlRouter's listener *after* your custom listener
$urlRouter.listen();




$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams) {

    var requiredLogin       = (toState && toState.data ? toState.data.requiredLogin       : false ),
        requiredGroupRights = (toState && toState.data ? toState.data.requiredGroupRights : false );        // require the user to have at least one of these rights in the current group

    if (requiredLogin && !AuthService.isLoggedIn()) {

        event.preventDefault();
        $state.transitionTo('401');
        return;
    }
    if(requiredGroupRights){

        var i,
            hasRight = false;
        for(i=0;i<requiredGroupRights.length;i++){

            if(GroupService.checkGroupRights(toParams.groupId, requiredGroupRights[i])){
                hasRight = true;
                break;
            }
        }

        if(!hasRight){

            event.preventDefault();
            $state.transitionTo('403');
            return;
        }

    }

});
克里斯·T

{ location: false }选项传递给$ state.go

$state.go("home.foo", {}, { location: false } );

实际观看:http : //plnkr.co/edit/w2aolrt9wdW3EFcEB3Lw?p=preview

var app = angular.module('demonstrateissue', ['ui.router']);

app.config(function($stateProvider, $urlRouterProvider) {
  $urlRouterProvider.otherwise("/home");
  $stateProvider.state({ 
    name: 'home', 
    url: '/home', 
    controller: function() { }, 
    template: '<h1>Home</h1><div ui-view></div>'}
  );
  $stateProvider.state({ 
    name: 'home.foo', 
    url: '/foo', 
    controller: function() { }, 
    template: '<h1>foo</h1>'}
  );
});

// Adds state change hooks; logs to console.
app.run(function($rootScope, $state, $location) {
  $rootScope.$state = $state;
  $rootScope.$location = $location;

  // This function will go to home.foo state but not change url
  $rootScope.gotofoo = function() { 
    $state.go("home.foo", {}, { location: false } );
  };
});
<!DOCTYPE html>
<html>
  <head>
    <script data-require="angular.js@*" data-semver="1.2.25" src="https://code.angularjs.org/1.2.25/angular.js"></script>
    <script data-require="ui-router@*" data-semver="0.2.13" src="https://rawgit.com/angular-ui/ui-router/0.2.13/release/angular-ui-router.js"></script>
  </head>

  <body ng-app="demonstrateissue">

      <div ui-view>/div>  

      <div class="header">
        Current URL: <b>{{$location.url()  }}</b> <br>
        Current State: <b>{{$state.current.name }}</b> <br>
        Current Params: <b>{{$state.params | json }}</b><br>
      </div>

      <!-- click this -->
      <a href ng-click="gotofoo()">Go to foo dont change url</a>
  </body>
</html>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

AngularJS UI路由器状态更改

在AngularJS ui路由器中,状态已更改,URL已更改,但模板URL未更改

反应路由器不更改URL

ui路由器更改状态时,角度控制器作用域不破坏变量

UI路由器切换回原始状态(URL:“”)不会更改URL

更改状态而不更改角度ui路由器中的浏览器历史记录

注册Angular UI路由器的状态更改

在Angular ui路由器中,嵌套状态url发生更改,但模板未加载

AngularJS UI路由器-更改URL而不重新加载状态

在不更改URL的情况下反应路由器

ui路由器:从服务更改stateParams?

如何将角度UI路由器的UI视图状态更改与CSS动画同步

ui路由器状态更改时,清除共享的AngularJS控制器变量

ui路由器中嵌套状态的URL路由

承诺数据未在路线状态更改时呈现-UI路由器

AngularJS UI路由器,滚动到状态更改的下一步

如何通知ui路由器中的状态更改取消?

UI路由器导航到父状态会更改查询字符串参数

ui路由器状态更改时运行javascript函数?

更改UI路由器上的状态时有angularjs infdig错误(带视频)

如何更改ui路由器上持久化stateParams的状态?

状态更改时,如何防止在命名视图上重新加载?AngularJS UI路由器

在UI路由器状态更改时更新父作用域

Vue路由器链接更改url,但不更改路由器视图组件

React路由器在状态更改后不重新渲染

在抽象状态,UI路由器,angularjs的url中的stateParams

不带URL的有角UI路由器初始状态

更改路由器路径

角度UI路由器不会更改位置