Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ionic/如何期望刷新缓存视图?_Javascript_Angularjs_Web_Ionic Framework - Fatal编程技术网

Javascript Ionic/如何期望刷新缓存视图?

Javascript Ionic/如何期望刷新缓存视图?,javascript,angularjs,web,ionic-framework,Javascript,Angularjs,Web,Ionic Framework,我目前使用的是最新的爱奥尼亚“夜间构建”版本 这个版本的一个好消息是: 默认情况下,缓存视图以提高性能。当视图 导航离开后,其元素留在DOM中,其作用域为 与循环断开连接。导航到以下视图时: 已缓存,然后重新连接其作用域,并且 留在DOM中的元素将成为活动视图。这也 允许保留以前视图的滚动位置 很有意思,所以我试了一下,它真的很平滑 然而,我遇到了一个严重的用户体验问题: 基本上,我的应用程序由2个部分组成 TabA旨在显示加载和列表项 TabB旨在显示其他项目 每个项目都有自己的导航:列出

我目前使用的是最新的爱奥尼亚“夜间构建”版本

这个版本的一个好消息是:

默认情况下,缓存视图以提高性能。当视图 导航离开后,其元素留在DOM中,其作用域为 与循环断开连接。导航到以下视图时: 已缓存,然后重新连接其作用域,并且 留在DOM中的元素将成为活动视图。这也 允许保留以前视图的滚动位置

很有意思,所以我试了一下,它真的很平滑

然而,我遇到了一个严重的用户体验问题

基本上,我的应用程序由2个部分组成

  • TabA旨在显示加载和列表项
  • TabB旨在显示其他项目
每个项目都有自己的导航:列出并显示特定项目。
显然,第一次,数据是新鲜的,但之后,因为cached=>stale

缓存的视图实际上适用于从特定选项卡的“显示”到“列表”的“返回”按钮。
实际上,scroll是维护的,控制器不需要重新加载=>非常好的性能

然而,当用户单击特定选项卡时,他想要的是得到一个刷新的列表

我真的找不到一种漂亮而有效的方法来刷新关于单击元素的特定缓存视图

我得到了那些声明的状态(显示了TabA的示例):

因此,
tab
的控制器是
tab.tabAList
tab.tabAShow
的父级

tabList
包含如下函数:

$scope.reloadItems = function() {
    //...
}
单击
tabA
时如何触发此功能?
棘手的部分是在运行嵌套的
tablist
控制器之前运行
TabsCtrl
code 我试图在选项卡的select属性的
下加入
$rootScope.$broadcast('reloadeItems',…)

但由于在发送事件时
tabAList
尚未运行,因此该事件将丢失

有没有人经历过,并且有一个很好的解决方案?
我重复一遍,目标是:“在选项卡单击上重新加载特定的缓存视图”

您应该收听
$ionicView。为选项卡的视图输入
事件

然后从
$scope
执行此操作:

        $scope.$on( "$ionicView.enter", function( scopes, states ) {
            if( states.fromCache && states.stateName == "tab.tabAList" ) {
                reloadItems();
            }
        });

…或类似的…

正是我刚才做的:)谢谢!
是否说明.fromCache
特定于爱奥尼亚?不需要
$rootScope
<代码>$scope
已足够,因为它是child;)正如Mik378所说,您只需要$scope。$on,不需要$rootScope。
        $scope.$on( "$ionicView.enter", function( scopes, states ) {
            if( states.fromCache && states.stateName == "tab.tabAList" ) {
                reloadItems();
            }
        });