Luk*_*den 10 angularjs ionic-framework
我通过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;
}
});
Run Code Online (Sandbox Code Playgroud)
在另一种状态下,如果单击与"公司"相关的按钮,则会将"公司"数据保存到本地存储.上述状态显示您之前点击过的公司.但我无法弄清楚如何$scope.firms
正确更新,因为控制器永远不会再次运行.
谁能帮我吗?
bra*_*ney 22
您可以将要运行的代码放在$ ionicView.enter中:
controller : function( $scope, $cordovaSQLite ){
$scope.$on('$ionicView.enter', function() {
// code to run each time view is entered
});
...
});
Run Code Online (Sandbox Code Playgroud)
请参阅"查看LifeCycle和事件":https://ionicframework.com/docs/v1/api/directive/ionView/
基于@ brandyshea的答案,我想补充一下,如果你想在一个区域/控制器/状态中不指定缓存,并利用其他区域的缓存,你可以简单地使用cache
你$stateProvider
的那个状态的参数.
在州提供程序中禁用缓存
Run Code Online (Sandbox Code Playgroud)$stateProvider.state('myState', { cache: false, url : '/myUrl', templateUrl : 'my-template.html' })
或者,您也可以使用其他方法之一:
使用属性禁用缓存
Run Code Online (Sandbox Code Playgroud)<ion-view cache-view="false" view-title="My Title!"> ... </ion-view>
全局禁用缓存$ ionicConfigProvider可用于设置可缓存的最大允许视图,但这也可用于通过将其设置为0来禁用所有缓存.
Run Code Online (Sandbox Code Playgroud)$ionicConfigProvider.views.maxCache(0);
参考文献:http://ionicframework.com/docs/api/directive/ionNavView/和http://ionicframework.com/docs/api/directive/ionView/