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

时间:2015-03-26 08:15:59

标签: 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;

    }
});

在另一种状态下,如果您点击与公司&#34;相关的按钮,它会保存&#34;公司&#34;数据到本地存储。上述状态显示您之前点击过的公司。但我无法弄清楚如何正确更新$scope.firms,因为控制器永远不会再次运行。

任何人都可以帮助我吗?

5 个答案:

答案 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)

将它放在离子视图中。

&#13;
&#13;
<ion-view cache-view="false">
&#13;
&#13;
&#13;

相关问题