【问题标题】:Angular 6 - Binding item not updating after data changeAngular 6 - 数据更改后绑定项不更新
【发布时间】:2019-02-12 09:16:04
【问题描述】:

在我的 HTML 中,我正在重复绑定一个项目:

<ul *ngFor="let item in items">
    <li>{{ item.id }}</li>
</ul>

这工作正常。但现在该值在 API 调用中被更改,如下所示:

doApiCall(){
    let value = this.items.find( x => x.id = '123');
    this.service.doIt().subscribe(
        (res: HttpResponse<myModel>) => {
            // response === { id = 456' }
            return value = res.body;
        }
    )
}

现在数组中的项目已经改变,但视图没有改变。但有趣的是,如果我在设置后立即手动更改let value,如下所示:

let value = this.items.find( x => x.id = '123');
value.id = '345'

然后更新发生。所以我不知道我在 API 调用中是否做错了什么。

【问题讨论】:

  • 仅供参考 {{ item.id }} 是单向绑定。 2-way 绑定用于[(ngModel)]
  • @JonasPraem 傻我,谢谢你的更正。
  • @JonasPraem 什么?您想如何在没有&lt;input&gt; 的情况下对模板进行双向绑定?
  • @web.dev 与 OP 的问题无关。但是,除了用户可以更改值的地方之外,您还想要在其他任何地方进行双向绑定吗?我指的是OP的标题

标签: angular api data-binding


【解决方案1】:

您似乎需要刷新 JavaScript 的工作原理。您正在返回 value = res.body 值。但那是什么?那甚至行不通。

似乎items 是引用类型的对象数组。当您尝试执行 value = res.body 时,您根本不会更改 items 数组中的任何内容。您只是重新分配存储在 value 变量中的引用,但您使用 Array.find 函数找到的项目未受影响。也许你应该尝试做类似的事情

doApiCall() {
    let value = this.items.find(x => x.id = '123');
    this.service.doIt().subscribe(
        (res: HttpResponse < any > ) => {
            value.id = res.body.id;
            value.someproperty = res.body.property;
        }
    )
}

但我不知道您的HttpResponse.body 型号。这就是为什么您应该从服务响应Promise&lt;T&gt; 而不是HttpResponse&lt;any&gt;。你正在使用 TypeScript,所以让它变得有用!

【讨论】:

  • 谢谢,我的 HttpResponse 实际上有一个模型。对不起,我的错误,应该澄清一下。但是单独分配我的值解决了这个问题。谢谢你。但是为什么我的对象在方法中是 reference 而值却不是
  • 好吧,假设你有两个模型: ModelA { property1: number;属性2:数字;属性3:模型B; } 模型B { 属性 1:字符串;属性2:数字;如果要存储 ModelA 的数组,则要存储对 ModelA 对象的引用。那么如果使用array.find获取ModelA,现在可以访问:ModelA.property1 - 值类型。 ModelA.property2 - 值类型。 ModelA.property3 - 引用类型。 ModelA.property3.property1 - 值类型。您需要知道哪些类型是引用,哪些是值。简单来说,每个对象都是引用类型。
  • 这是编程的核心概念。只需在 DuckDuck 或 Google 中输入“reference vs value type JavaScript”,你就会发现。
  • 完美。非常感谢您的支持!
猜你喜欢
  • 2019-03-30
  • 2022-11-24
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
相关资源
最近更新 更多