当前位置: 首页 > 知识库问答 >
问题:

从子页面调用模型更改时视图未刷新(Ionic

赖明煦
2023-03-14

我在Angular 5.2.9中使用Ionic 3.20,并且在模型更改后内容刷新时遇到问题。我对这一切都不熟悉——我可能错过了一些非常基本的东西。

在我看来,我有这个元素:


    <ion-item-sliding #slidingElement *ngFor="let item of this.myService.myList?.firstLevel.secondLevel">

在服务中,我有两个功能


    public myList: Array;

    getListOfData(): Observable {
        return  this.http.get(`service_endpoint_url`);
    }

    retrieveListOfData() {
        this.getListOfData().subscribe((result) => {
            this.myList = result;
            this.counter = this.myList['firstLevel'].length;
        });
    }

首次加载时(在ngOnInit上)。我的服务。调用retrieveListOfData(),并成功呈现视图。当我对列表中的特定项执行操作时,应该刷新列表(该特定项不应该再出现在列表中)。我是这样做的:


    this.actionService.DoAction().subscribe((result) => {
        if(result == 'success') {
            this.myService.retrieveListOfData();
        }
    });

如果在同一个页面(项目列表所在的页面)中调用此代码,则它可以工作。

但如果我在特定项目的详细信息页面(“子”页面,在列表项目单击时访问),我可以在控制台中看到该变量。myList正在更改,但当显示包含项目列表的页面时,不会重新显示视图(项目列表)。代码:


    this.actionService.DoAction().subscribe((result) => {
        if(result == 'success') {
            this.myService.retrieveListOfData();
            //goes from detail page of specific item back to page with list of items
            this.app.getRootNav().popToRoot();
        }
    });

这可能与区域有关?如何从特定项目的详细信息页面正确刷新项目列表?

提前感谢!

编辑2018-05-14:我发现了我的应用程序中的问题所在。我们实现了模块的延迟加载。因为服务并不是作为一个单独的组件在组件之间共享的,而是每个组件都运行它的服务。我实现了本文中提出的解决方案。

我还发现我在这个问题中的命名有点偏——提到的组件不是兄弟姐妹(不是“角度方式”)。我把约书亚的答案留为正确。

共有1个答案

薛坚
2023-03-14

Angular不会检测注入服务中变量的更改。

有两种方法可以生产你想要的东西。

输出发射器:在详细信息(子)页面中使用输出发射器来通知主(父)页面的更改。

在儿童中。组成部分ts:

@Output() listChanged = new EventEmitter<void>();

this.actionService.DoAction().subscribe((result) => {
    if(result == 'success') {
        this.myService.retrieveListOfData();
        this.listChanged.emit();
        //goes from detail page of specific item back to page with list of items
        this.app.getRootNav().popToRoot();
    }
});

在parent.component.ts中,将其添加到子组件:(listChanged)="检索ListOfData()"

可观察对象:在服务主题中配置您的列表并在组件中订阅它,而不是将数据存储在变量中,而是将数据推送到使用Subject.next(data)

 类似资料:
  • 问题内容: 我试图弄清楚Angular的工作原理,并在模型更改时无法更新视图。 的HTML JS http://jsfiddle.net/N2G7z/ 有任何想法吗? 问题答案: 正如上面提到的Ajay beniwal一样,您需要使用Apply来开始消化。

  • 问题内容: 这有可能吗? 这是问题所在: 我有一个使用此URL的关键字搜索(搜索后):http:// localhost / thi / search?keyword = key 然后我有一个使用AjaxForm插件(jquery)的滑块搜索… 当我执行滑块搜索时,显然我仍然会在关键字搜索URL中(因为请求是通过ajax发送的) 有没有办法将当前网址更改为类似http:// localhost /

  • 我有一个具有2个视图\控制器的应用程序: 谢谢你。

  • 首先,我在这方面工作了一整天,但什么也做不到。我有一个,其适配器使用的。我尝试使用回调类实现: 下面是TouchHelper的初始化 我的适配器实现接口 链接 适配器类查看器类

  • 问题内容: 我正在尝试使用bootstrapscollspy突出显示由角度中继器生成的列表项。 我遇到的问题是,我在Angle将模型更改应用到视图之前,正在从angular控制器刷新scrollspy插件。 确保DOM本身已更新(不仅仅是角度模型)之后,确保scrollspy(’refresh’)调用发生的角度方法是什么? 模板: 控制器: 问题答案: 我如何使用Blesh的答案解决此问题 模板:

  • 问题内容: 我已经阅读了有关此问题的主题,例如:[\AngularJS中未更新视图,\但我仍然不明白如何在我的简单示例中应用它。 我有这个功能: 当代码中的其他地方更新时(用户单击,交互,发送XHR请求时),它不会更新我的视图。我知道我需要使用$apply做些事情,但我不知道在哪里以及如何做。 有人可以向我解释如何针对这个简单用例解决此问题吗? 我的模型看起来像这样(如果这个问题是必要的)-它里面