我最近开始使用 Ionic Framework (因此也使用了 Angular.js )我遇到了的问题Angular UI路由器:当$stateParams
之一更改时,我注册的状态之一不会重新初始化。起初我认为它发生是因为状态是抽象的并且有孩子,所以它永远不会直接激活 - 但即使我把它改为非抽象的,也是最深的"状态(即,当看到树结构内的状态时的叶子),问题仍然存在。奇怪的是,它似乎不会发生在其他州。
我尝试过不同的方法并仔细阅读文档,但我找不到问题的原因。
以下是我用来注册状态的代码。状态app.festival
是我遇到问题的那个:
app.festival.overview
状态时,例如使用URL /festival/33/overview
,状态的控制器以及app.festival
的抽象父控制器正确初始化/festival/21/overview
之类的东西时,只有这个状态的控制器被重新初始化,但不是它的抽象父控制器(尽管参数为festivalId
是其中的一部分,我应该触发重新加载)festivalId
状态管理的实际节日数据(由app.festival
引用)在整个应用程序中保持不变,因为基本上它只是初始化一个"实例&#34 ; app.festival
的控制器,无论$stateParams
我需要这种结构的原因是需要有一个页面(状态)的整个部分来处理单个节日(应该由app.festival
州管理)。
$stateProvider
.state( 'app', {
url: '',
abstract: true,
views: {
'appContent': {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
}
}
})
.state( 'app.general', {
url: '/general',
abstract: true,
views: {
'mainContent': {
templateUrl: 'views/sections/general.html',
controller: 'GeneralCtrl'
}
}
})
.state( 'app.festival', {
url: '/festival/{festivalId:int}',
abstract: true,
views: {
'mainContent': {
templateUrl: 'views/sections/festival.html',
controller: 'FestivalCtrl'
}
}
})
.state( 'app.general.festivals', {
url: '/festivals',
views: {
'generalContent': {
templateUrl: 'views/pages/general-festivals.html',
controller: 'GeneralFestivalsCtrl'
}
}
})
.state( 'app.general.events', {
url: '/events',
views: {
'generalContent': {
templateUrl: 'views/pages/general-events.html',
controller: 'GeneralEventsCtrl'
}
}
})
.state( 'app.general.event', {
url: '/events/{eventId:int}',
views: {
'generalContent': {
templateUrl: 'views/pages/general-event.html',
controller: 'GeneralEventCtrl'
}
}
})
.state( 'app.festival.overview', {
url: '/overview',
views: {
'festivalContent': {
templateUrl: 'views/pages/festival-overview.html',
controller: 'FestivalOverviewCtrl'
}
}
});
.state( 'app.festival.guide', {
url: '/guide',
views: {
'festivalContent': {
templateUrl: 'views/pages/festival-guide.html',
controller: 'FestivalGuideCtrl'
}
}
});
如果有人能帮助我,那将是很好的,因为我已经花了相当长的时间来研究这个问题,但还没有找到解决方案。如果您需要更深入地了解代码的特定部分,我也很乐意在此处发布。
答案 0 :(得分:2)
这是Ionic的默认行为。默认情况下,它会缓存视图和控制器执行以提高性能。您可以使用cache: false
禁用它:
$stateProvider.state('myState', {
cache: false,
url : '/myUrl',
templateUrl : 'my-template.html'
});
或者您可以使用ui-sref-opts
how to put reload option in ui-sref markup
请参阅Caching文档。