Ion-View不刷新(Angular UI-Router)

时间:2016-06-06 11:45:50

标签: javascript angularjs ionic-framework angular-ui-router ionic-view

我有这个经典的离子视图刷新问题:

.state('app', {
    url: '/app',
    abstract: true,
    templateUrl: 'templates/menu.html',
    controller: 'AppCtrl'
  })
   .state('app.menu', {
    url: "/menu",
    views: {
      'menuContent': {
        templateUrl: "templates/headmenu.html"
      }
    }
  })
  .state('app.menu.media', {
    url: "/media/:MediaType",
    views: {
      'media-tab': {
        templateUrl: "templates/tabs/media.html",
        controller: "MediaCtrl"
      }
    }
  }).state('app.settings', {
    url: "/settings",
    views: {
      'settingsContent': {
        templateUrl: "templates/settings.html",
        controller: "SettingsCtrl"
      }
    }
  })

应用程序从'app.menu.media'状态开始,我点击'设置',视图已加载,但当我尝试返回'app.menu.media'状态时出现问题,视图是没有刷新(我仍然有'设置'视图)

其他开发人员提出的解决方案之一是在ui-sref-opts="{reload: true, notify: true}"标记内使用<a ui-sref="app.menu.media" ...> ..</a>,但它并不流畅,用户感觉应用程序会在短时间内冻结,同样适用于javascript解决方案:$state.go('app.menu.media', {}, {reload: true});

我知道控制器在处于相同状态时没有加载,但在这个例子中我们有不同的控制器:“MediaCtrl”和“SettingsCtrl”,那么为什么我们有这个问题呢?有没有解决这个问题的干净解决方案?

修改 即使我正在禁用缓存,也会出现此问题:$ionicConfigProvider.views.maxCache(0);

1 个答案:

答案 0 :(得分:0)

在销毁应用程序后,我发现问题与缓存无关,但并不意味着启用视图缓存不会影响应用程序,禁用缓存对我的情况很重要。

所以这个问题与我使用相同状态&#34; app &#34;对于&#39; 媒体&#39;和&#39; 设置&#39;视图,具有不同的视图名称:&#34; settingsContent &#34; for&#34; app.settings&#34;和&#34; menuContent&#34; for&#34; app.menu&#34;。因此,我必须将这两个离子导航视图添加到链接到&#34; app &#34;的模板Url中。州,这是&#34; menu.html &#34;,就像这样:

 <ion-nav-view name="menuContent"></ion-nav-view>
 <ion-nav-view name="settingsContent"></ion-nav-view>

所以当我回到&#34; app.menu.media &#34;状态,视图确实已加载,但&#34; 设置&#34;视图仍然存在,它隐藏了我新请求的视图&#34; media &#34;!

所以我解决这个问题的方法是使用相同的Ion View名称:

.state('app.menu', {
url: "/menu",
views: {
  'THESAMENAME': {
    templateUrl: "templates/headmenu.html"
  }
}...
....
.state('app.settings', {
url: "/settings",
views: {
  'THESAMENAME': {
    templateUrl: "templates/settings.html",
    controller: "SettingsCtrl"
  }
}

在menu.html中,我删除了前两行,并将主题替换为:

<ion-nav-view name="THESAMENAME"></ion-nav-view>

我希望这可以帮助某人