$ state.go到命名视图

时间:2015-04-24 18:33:37

标签: angularjs angular-ui-router ionic

我正在努力使用ui-router,离子和命名视图。

在我以前的角项目中,我检查了主app.js文件,如果有人登录,如果没有,我使用$ state.go()重定向到登录状态;

这方面的一个例子:

angular.module() ...
.run(function() {

$rootScope.$on('$stateChangeStart', function() {
if(LoginService.isLoggedIn() !== true) {
   $state.go('login');
}
}

});

现在这是我正在使用的简化版本,但它显示了我的意思(我希望)。

这在我的其他项目中效果很好,现在我正在尝试Ionic,并且他们使用命名视图。当应用程序加载时,它会将我正确地重定向到登录页面。但是当有人点击(标签)按钮时。它重定向到正确的url(/ login),但视图未加载,因为tab按钮引用命名视图:例如:

标签:

<!-- Dashboard Tab -->
<ion-tab title="User" icon-off="ion-ios-person" icon-on="ion-ios-person" href="#/tab/dash">
  <ion-nav-view name="tab-dash"></ion-nav-view>
</ion-tab>

<!-- Chats Tab -->
<ion-tab title="Chats" icon-off="ion-ios-chatboxes-outline" icon-on="ion-ios-chatboxes" href="#/tab/chats">
  <ion-nav-view name="tab-chats"></ion-nav-view>
</ion-tab>

<!-- Account Tab -->
<ion-tab title="Account" icon-off="ion-ios-gear-outline" icon-on="ion-ios-gear" href="#/tab/account">
  <ion-nav-view name="tab-account"></ion-nav-view>
</ion-tab>

州的定义如下:

$stateProvider

// setup an abstract state for the tabs directive
  .state('tab', {
  url: "/tab",
  abstract: true,
  templateUrl: "templates/tabs.html"
})

// Each tab has its own nav history stack:

.state('tab.dash', {
  url: '/dash',
  views: {
    'tab-dash': {
      templateUrl: 'templates/tab-dash.html',
      controller: 'DashCtrl'
    }
  }
})

Can I use $state.go to not only redirect me to a state but also use a specific named view

我现在已经四处看了几个小时,但我找不到下降的答案。

1 个答案:

答案 0 :(得分:0)

您说要阻止用户在未登录的情况下查看某些视图,如果不是,则应将其重定向到/login。您可以尝试使用LoginService来检查路由是否需要身份验证,或者检查它们是否实际经过身份验证。

angular.module("myApp")
.run(function ($rootScope, $state, LoginService) {
$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams){
  if (toState.authenticate && !LoginService.isAuthenticated()){
    // User isn’t authenticated
    $state.transitionTo("login");
    event.preventDefault(); 
   }
 });
});

然后你可以使用authenticate修复你的路线:true

myApp.config(function($stateProvider, $urlRouterProvider){
$stateProvider
.state("tab.dash", {
  url: "/dash",
  views: {
    'tab-dash': {
     templateUrl: 'templates/tab-dash.html',
     controller: 'DashCtrl'
  },
  authenticate: true
})
.state("login", {
  url: "/login",
  templateUrl: "templates/login.html",
  controller: "LoginCtrl",
  authenticate: false
});
// Send to login if the URL was not found
$urlRouterProvider.otherwise("/login");
});