我有这个经典的离子视图刷新问题:
.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);
答案 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>
我希望这可以帮助某人