【问题标题】:Angular UI Router: Different states with same URL?Angular UI路由器:具有相同URL的不同状态?
【发布时间】:2014-04-28 14:41:16
【问题描述】:

我的应用程序的着陆页有两种状态:home-publichome-logged-in。现在我想在同一个 URL 上显示两种状态,但让控制器和模板依赖于用户会话(用户是否登录?)。

有没有办法做到这一点?

【问题讨论】:

    标签: javascript angularjs angular-ui-router


    【解决方案1】:

    您可以有一个控制要加载哪个状态的基本状态,并且您可以简单地让声明该基本状态的子状态没有 url:

    .state('home', {
      url: "/home",
      templateUrl: "....",
      controller: function($scope,$state,authSvc) {
         if(authSvc.userIsLoggedIn()){
              $state.go('home.loggedin')
         }else{
              $state.go('home.public')
         }
      }
    })
    
    
    .state('home.public', {
      url: "",
      templateUrl: "....",
      controller: function($scope) {
         ...........
      }
    })
    
    .state('home.loggedin', {
      url: "",
      templateUrl: "....",
      controller: function($scope) {
         ...........
      }
    })
    

    现在在您的基本状态 (home) 的控制器中,您可以检查用户是否已登录,并使用 $state.go() 加载适当的状态。

    编辑

    正如承诺的那样,a working plunk

    【讨论】:

    • 这似乎不起作用。我认为这与类似的 URL 有关。如果我注释掉其中一个子状态,它会起作用。
    • @jvannistelrooy,我以前用过这种方法,让我创建一个plunk。
    • 谢谢,这行得通!是否有必要在子状态中定义空 url。对我来说,没有它们也可以。
    • 父母和孩子有相同的网址,你的伎俩只是因为父母与孩子交易(home - > home.loggedin)。如果您从另一个州(不是“家”)直接与孩子进行交易,它将无法正常工作.. ui-router 将调用子州的 onExit。我找不到解决方案..即使我无法通过点击 url 将状态声明为“不可激活”
    • @PaoloSanchi 您可以通过将“home”状态设置为“abstract:true”来解决这个问题
    【解决方案2】:

    我不确定两个州是否可以拥有相同的url。我认为可行的选择是定义单个状态

    $stateProvider.state('home', {
      templateUrl: function (stateParams){
        // Implement a logic that select what view from the server should be returned for logged in user and otherwise
        //return 'templateurl';
      }
    })
    

    我没试过,但应该可以。

    【讨论】:

    • 谢谢,这就是我试图做的,但似乎我无法将我的会话或用户模型传递给myApp.Config,所以我无法建立正确的逻辑。
    • 您是否尝试过完全可注入的templateProvider。您可以尝试<div ng-include='templateurl'></div 作为返回值。请参阅文档中的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多