离子$ state.go redirect在点击

时间:2015-06-02 16:45:12

标签: angularjs ionic-framework angular-ui-router firebase

我正在使用离子与firebase,并尝试在登录主页时重定向。 $ state.go重定向确实有效,但我有一个名为' Profile'的隐藏标签,在用户通过身份验证之前我不会显示。此标签仍隐藏在$ state.go重定向上,并且在我点击“主页”之前不会显示。再次选项卡。如何在重定向上加载ui的负载?

HTML:

标签HTML:

<ion-tabs class="tabs-icon-top tabs-color-active-positive" ng-controller="LoginCtrl">

  <!-- Login Tab -->
  <ion-tab title="Login" icon-off="ion-locked" icon-on="ion-locked" href="#/tab/login">
    <ion-nav-view name="tab-login"></ion-nav-view>
  </ion-tab>

  <!-- Dashboard Tab -->
  <ion-tab title="New Post" icon-off="ion-compose" icon-on="ion-compose" href="#/tab/new">
    <ion-nav-view name="tab-new"></ion-nav-view>
  </ion-tab>

  <!-- Chats Tab -->
  <ion-tab title="Home" icon-off="ion-ios-home" icon-on="ion-ios-home" href="#/tab/home">
    <ion-nav-view name="tab-home"></ion-nav-view>
  </ion-tab>
  <!-- Account Tab -->
  <ion-tab class="{{hiddenProfileTab()}}" title="Profile" icon-off="ion-person" icon-on="ion-person" href="#/tab/profile">
    <ion-nav-view name="tab-profile"></ion-nav-view>

  </ion-tab>



</ion-tabs>

登录控制器

.controller('LoginCtrl', ['$scope', '$rootScope',  '$state', '$location', function($scope, $rootScope, $state, $location) {

   $scope.hiddenProfileTab = function(){
  // return "ng-hide";
  if ($rootScope.currentUser){
    return "ng-show";
  } else {
    return "ng-hide";
  }
 }

//DO SOME THINGS
      // $location.path('tab.home')
      // $state.go('tab.home')
      // $state.go('tab.home'), {}, { reload: true }
      $state.go('tab.home',{},{location:'replace'});
    };





 }])

要重申此问题,“个人资料”标签仍隐藏在$ state.go重定向到“家庭”主页上。页面,直到&#39; home&#39;单击页面选项卡。

如何在重定向上加载UI?

3 个答案:

答案 0 :(得分:3)

使用ng-show代替使用带{{}}插值的class属性。

  <ion-tab ng-show="currentUser" title="Profile" icon-off="ion-person" icon-on="ion-person" href="#/tab/profile">
      <ion-nav-view name="tab-profile"></ion-nav-view>
  </ion-tab>

答案 1 :(得分:0)

通过设置cache:false解决此问题,以便强制控制器再次加载。

  .state('tab.home', {
    cache: false,
      url: '/home',
      views: {
        'tab-home': {
          templateUrl: 'templates/tab-home.html',
          controller: 'HomeCtrl'
        }
      }
    })

答案 2 :(得分:0)

不确定它是否直接归因于此特定问题,但是当我遇到类似问题时,元素在用户开始与UI交互之前不显示,我发现问题是由于多个元素具有相同的& #34; ID&#34;属性值。

在我的情况下,它与我在多个视图上使用的加载器动画图标有关。我总是将加载器ID设置为相同的东西(&#34; loading-progress&#34;)。在显示和隐藏我的加载器时,我遇到了奇怪的行为,直到我确定为每个加载器命名。

最终,我认为我的问题是由于没有将角度视为单页应用程序而是编码,好像它是一个具有独特页面和视图的完整网站。只关注手头的观点并忘记它实际上是坐在一大堆嵌套视图和html片段中,这很容易。

编辑:另外,我应该提到,另一个没有出现内容的常见问题(特别是动态加载的内容)通常与窗口/ div调整大小有关。特别是,如果您从隐藏的div开始,然后通过api调用填充数据,您通常需要通过调用来结束它:

$ ionicScrollDelegate.resize()

强制重新计算div的大小。如果没有这个,您的数据可以加载但仍然不可见,因为父div仍然以0px高度挂出。

再次编辑!:

此外,在使用ng-repeat和类似的动态角度数据绑定时,强制ng逻辑将html与您可以使用的数据重新同步:

$ $范围应用();