我在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:我发现了我的应用程序中的问题所在。我们实现了模块的延迟加载。因为服务并不是作为一个单独的组件在组件之间共享的,而是每个组件都运行它的服务。我实现了本文中提出的解决方案。
我还发现我在这个问题中的命名有点偏——提到的组件不是兄弟姐妹(不是“角度方式”)。我把约书亚的答案留为正确。
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来开始消化。
我有一个具有2个视图\控制器的应用程序: 谢谢你。
首先,我在这方面工作了一整天,但什么也做不到。我有一个,其适配器使用的。我尝试使用回调类实现: 下面是TouchHelper的初始化 我的适配器实现接口 链接 适配器类查看器类
问题内容: 这有可能吗? 这是问题所在: 我有一个使用此URL的关键字搜索(搜索后):http:// localhost / thi / search?keyword = key 然后我有一个使用AjaxForm插件(jquery)的滑块搜索… 当我执行滑块搜索时,显然我仍然会在关键字搜索URL中(因为请求是通过ajax发送的) 有没有办法将当前网址更改为类似http:// localhost /
问题内容: 我已经阅读了有关此问题的主题,例如:[\AngularJS中未更新视图,\但我仍然不明白如何在我的简单示例中应用它。 我有这个功能: 当代码中的其他地方更新时(用户单击,交互,发送XHR请求时),它不会更新我的视图。我知道我需要使用$apply做些事情,但我不知道在哪里以及如何做。 有人可以向我解释如何针对这个简单用例解决此问题吗? 我的模型看起来像这样(如果这个问题是必要的)-它里面
问题内容: 我正在尝试使用bootstrapscollspy突出显示由角度中继器生成的列表项。 我遇到的问题是,我在Angle将模型更改应用到视图之前,正在从angular控制器刷新scrollspy插件。 确保DOM本身已更新(不仅仅是角度模型)之后,确保scrollspy(’refresh’)调用发生的角度方法是什么? 模板: 控制器: 问题答案: 我如何使用Blesh的答案解决此问题 模板: