【问题标题】:Angular / Ionic - controller only runs onceAngular / Ionic - 控制器只运行一次
【发布时间】:2019-02-16 04:35:11
【问题描述】:

我通过 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;

    }
});

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

谁能帮帮我?

【问题讨论】:

    标签: angularjs ionic-framework


    【解决方案1】:

    你可以把你要运行的代码放在$ionicView.enter中:

    controller : function( $scope, $cordovaSQLite ){
        $scope.$on('$ionicView.enter', function() {
            // code to run each time view is entered
        });
    
        ...
    });
    

    请参阅“查看生命周期和事件”:https://ionicframework.com/docs/v1/api/directive/ionView/

    【讨论】:

      【解决方案2】:

      基于@brandyshea 的回答,我想补充一下,如果您想在一个区域/控制器/状态中指定不缓存,并利用其他区域的缓存,您可以简单地在您的$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/

      【讨论】:

        【解决方案3】:

        您无需禁用整个应用缓存。 如果你想在每次进入控制器时重新运行控制器,你应该在离开之前清除缓存:

         $scope.$on("$ionicView.afterLeave", function () {
                 $ionicHistory.clearCache();
         }); 
        

        【讨论】:

        • 快速提问,这会清除所有缓存,你能清除那个状态的缓存吗?
        • 我认为只为一种状态动态地清除缓存是不可能的。您可以将您的状态配置为不被缓存,但这样状态将永远不会被缓存
        【解决方案4】:

        Ionic 内部有缓存机制。您可以像这样在配置函数中全局禁用缓存:

        $ionicConfigProvider.views.maxCache(0);
        

        【讨论】:

          【解决方案5】:

          把它放在你的 ion-view 中。

          &lt;ion-view cache-view="false"&gt;

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-24
            • 1970-01-01
            • 1970-01-01
            • 2016-11-11
            • 1970-01-01
            • 2021-01-09
            相关资源
            最近更新 更多