我通过Ionic框架开始使用Angular,但是我无法理解为什么控制器只运行一次,即我改变状态,控制器运行,转换到另一个状态然后再返回而控制器没有第二次跑。这是我的状态:
$stateProvider.state( 'container.previous', {
url: 'previous',
views: {
main : {
templateUrl : 'views/previous.html',
controller : function( $scope, $cordovaSQLite ){
$scope.firms = [];
$cordovaSQLite.execute(window.db, "SELECT * FROM recent GROUP BY phone ORDER by id DESC").then(function(res) {
for (i = 0; i < res.rows.length; i++) {
$scope.firms.push(res.rows.item(i));
}
}, function (err) {
console.error(err);
});
}
}
},
onStateChangeStart : function(){
backButton = true;
}
});
在另一种状态下,如果您点击与公司&#34;相关的按钮,它会保存&#34;公司&#34;数据到本地存储。上述状态显示您之前点击过的公司。但我无法弄清楚如何正确更新$scope.firms
,因为控制器永远不会再次运行。
任何人都可以帮助我吗?
答案 0 :(得分:22)
您可以将要运行的代码放在$ ionicView.enter:
中controller : function( $scope, $cordovaSQLite ){
$scope.$on('$ionicView.enter', function() {
// code to run each time view is entered
});
...
});
请参阅“查看LifeCycle和事件”:https://ionicframework.com/docs/v1/api/directive/ionView/
答案 1 :(得分:5)
基于@ brandyshea的回答,我想补充一下,如果你想在一个区域/控制器/状态中不指定缓存,并利用其他区域的缓存,你可以简单地使用cache
参数在你的$stateProvider
中为该州。
在状态提供程序中禁用缓存
$stateProvider.state('myState', { cache: false, url : '/myUrl', templateUrl : 'my-template.html' })
或者,您也可以使用其他方法之一:
使用属性
禁用缓存<ion-view cache-view="false" view-title="My Title!"> ... </ion-view>
全局禁用缓存 $ ionicConfigProvider可用于设置可以缓存的最大允许视图,但也可以通过将其设置为0来禁用所有缓存。
$ionicConfigProvider.views.maxCache(0);
参考文献:http://ionicframework.com/docs/api/directive/ionNavView/和http://ionicframework.com/docs/api/directive/ionView/
答案 2 :(得分:4)
您不需要停用整个应用缓存。 如果您想在每次进入控制器时重新运行控制器,则应在离开之前清除缓存:
$scope.$on("$ionicView.afterLeave", function () {
$ionicHistory.clearCache();
});
答案 3 :(得分:2)
Ionic内部有一个缓存机制。您可以在配置函数中全局禁用缓存,如下所示:
$ionicConfigProvider.views.maxCache(0);
答案 4 :(得分:2)
将它放在离子视图中。
<ion-view cache-view="false">
&#13;