Ionic3与原生Android数据交互UI不更新

Ionic开发过程中遇到一个奇怪的问题,当通过Android原生Java以广播方式将数据传递到.ts页面时,数据可以console.log()出来,但UI并没有更新。

我的Android代码:

Intent intent = new Intent("TAG");
bundle.putString("userdata", "{ name: '" + "小明" + "', age: '" + "18" + "'}");
intent.putExtras(bundle);
LocalBroadcastManager.getInstance(context).sendBroadcastSync(intent);

在home.ts页面中,我订阅了触发事件,我的初始代码是:

ionViewWillEnter() {
    this.broadcaster.addEventListener('TAG').subscribe((event) => {
          this.items.push({
               name: event['name'],
               age: event['age'],
          });
    });
}

我期望在这里发生的是我的items数组(使用* ngFor以标准方式在我的模板中表示)将使用来自广播对象的值进行刷新。不幸的是,console.log()可以看到数据更新,但屏幕上仍然没有显示任何内容。通过一番Google,在这里找到了解决方案,需要一个变化检测,下面是一些小的更改。

feat

1、导入NgZone模块:

import { NgZone} from '@angular/core';

2、创建一个NgZone:

this.zone = new NgZone({enableLongStackTrace: false});

3、将代码封装在this.zone.run()中:

ionViewWillEnter() {
    this.broadcaster.addEventListener('TAG').subscribe((event) => {
          this.zone.run(() => {
                this.items.push({
                   name: event['name'],
                   age: event['age'],
                });
          });
    });
}

至此,模型更改就会成功检测并更新UI,详情需要阅读Angular ZonesChangeDetectorRef,希望这可以帮助有类似问题的猿友哈哈。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,277评论 25 709
  • 快乐,是一种抉择。多数人都相信如果他们拥有现在所没有的东西,会更加的快乐,更加的安全和被爱。他们开始采取行动,已取...
    一块西瓜阅读 1,222评论 1 1
  • 天空为何这么蓝,世界为何这么渺小,让我们相遇又相识,但时间还是证明了,在一起未必就能永远。 我承认,我还喜欢你,,...
    阿妙阅读 5,449评论 16 4
  • 驻村工作第二天,清晨迎来希望小学里活力四射的早操时间,我满心欢喜地期待着新一天的工作。初来乍到,万物皆心,工作之...
    卖男孩的小火柴_b369阅读 1,696评论 0 0
  • 写下这段感触,只为了激励自己,没有什么事情是我们不能做的,而是你不愿意尝试,现在的我,只要我想我就想去尝试一下,无...
    Mcallmemayb阅读 1,404评论 10 2