Angular/Ionic - 控制器只运行一次

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/


red*_*x05 5

基于@ brandyshea的答案,我想补充一下,如果你想在一个区域/控制器/状态中不指定缓存,并利用其他区域的缓存,你可以简单地使用cache$stateProvider的那个状态的参数.

在州提供程序中禁用缓存

$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>
Run Code Online (Sandbox Code Playgroud)

全局禁用缓存$ ionicConfigProvider可用于设置可缓存的最大允许视图,但这也可用于通过将其设置为0来禁用所有缓存.

$ionicConfigProvider.views.maxCache(0);
Run Code Online (Sandbox Code Playgroud)

参考文献:http://ionicframework.com/docs/api/directive/ionNavView/http://ionicframework.com/docs/api/directive/ionView/