ngModel不会在更改时更新值

弗拉基米尔·胡迈努克

我在ngFor循环内有ngModel:

<div *ngFor="let comment of comments">
   <div *ngFor="let answer of toArray(comment.answers); let j = index; trackBy: trackByIndex;">
      <textarea id="editAnswer[j]" name="editAnswer[j]" [(ngModel)]="answer.text">

      {{ answer.text }}
   </div>
</div>

在我的组件中,我有两个函数用于索引迭代并将对象转换为数组:

  trackByIndex(index: number, obj: any): any {
    return index;
  }

  toArray(answers: object) {
    return Object.keys(answers).map(key => ({
      key,
      ...answers[key]
    }))
  }

但是,当我更改文本时,绑定到textarea中的内容时,ngModel不会更改。

Stackblitz示例:https://stackblitz.com/edit/angular-z6xatv

康纳斯·范

toArray方法似乎正在创建原始comments.answers.text的副本text属性在输入的元素被修改,变化不会影响原始数据(在控制台此stackblitz表明值不共享)。

如果简化toArray以使其返回的简单数组answers,则代码有效(请参阅此stackblitz)。数组中的项目text与原始数据共享相同的引用。

comments = [
  {
    text: 'dsddsdsd', answers: {
      FszW: { text: 'answer 1' },
      dsSce: { text: 'answer 2' }
    }
  }
]

toArray(answers: object) {
  return Object.keys(answers).map(key => answers[key]);
}

如果您需要访问密钥,则可以使用以下版本toArray

toArray(answers: object) {
  return Object.keys(answers).map(key => {
    return { key: key, value: answers[key] };
  });
}

具有以下模板标记:

<textarea name="answer_{{j}}" [(ngModel)]="answer.value.text"></textarea>
{{ answer.key }}: {{ answer.value.text }}

作为附带说明,我建议使用以下语法之一在模板中设置name属性:

name="answer_{{j}}"
[name]="'answer_' + j"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

AngularJS指令不会在范围变量更改时更新

React 视图不会在状态更改时更新

useEffect不会在路由更改时更新状态

角度图不会在数据更改时更新

React JS组件不会在状态更改时更新

ReactJS 组件不会在父状态更改时更新

mapStateToProps 不会在更改时更新组件

ReactJS组件textarea不会在状态更改时更新

NSLocale NSLocale preferredLanguages不会在语言更改时更新

React useCallback不会在状态更改时更新

绑定控件不会在源更改时更新

AngularJS不会在异步模型更改时更新视图

Webpack不会在更改时重建

Bootstrap v4 popover不会在React中的状态更改时更新

单元格样式绑定不会在值更改时更新

AngularJS 1.5:scope。$ watch内部链接函数不会在模型更改时更新

自定义 vue 组件不会在值更改时更新

Auto-Scaling组不会在启动配置更改时更新

React Native ListView不会在数据更改时更新

Angular 2视图不会在数组更改时更新

反应useCallback不会在第一次更改时更新状态onChange

Angular V9 异步管道不会在数据更改时更新模板视图

Angular 组件属性不会在引用属性更改时更新

Spring Boot父模块不会在子模块上更改时更新

列表框不会在组合框索引更改时更新

RxSwift Observeable 不会在数据更改时更新 tableview

V绑定不会在商店状态更改时更新类

Redux 存储不会在状态更改时更新组件视图

实现ControlValueAccessor的Angular 2指令不会在更改时更新'touched'属性