首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态更新数据

动态更新数据
EN

Stack Overflow用户
提问于 2021-04-09 02:42:01
回答 2查看 61关注 0票数 0

这里是HTML代码。我创建了表格,并使用了一些ng模式。

代码语言:javascript
复制
<div class="container">
    <table>
        <thead>
            <tr>
                <th>Name</th>
                <th>Username</th>
                <th>Email</th>
                <th>Phone</th>
                <th>Website</th>
                <th>Edit data</th>
            </tr>
        </thead>
        <tbody>
            <tr *ngFor="let contact of contacts">
                <td><span>{{ contact.name }}</span></td>
                <td><span>{{ contact.username }}</span></td>
                <td><span>{{ contact.email }}</span></td>
                <td><span>{{ contact.phone }}</span></td>
                <td><span>{{ contact.website }}</span></td>
                <td><button class="edit-data" (click)="openEdit(contentEdit, contact)">Edit</button></td>
            </tr>
        </tbody>
    </table>
</div>

<ng-template #contentEdit let-modal>
    <div class="modal-header">
        <h4 class="modal-title" id="modal-basic-title">Edit data</h4>
        <button type="button" class="close" aria-label="Close" (click)="modal.dismiss('Cross click')">
          <span aria-hidden="true">&times;</span>
        </button>
    </div>
    <div class="modal-body">
        <form [formGroup]="editForm" novalidate>
            <div class="form-group">
                <label for="name">Name</label>
                <div class="input-group">
                    <input formControlName="name" class="form-control">
                </div>
            </div>
            <div class="form-group">
                <label for="username">Username</label>
                <div class="input-group">
                    <input formControlName="username" class="form-control">
                </div>
            </div>
            <div class="form-group">
                <label for="email">Email</label>
                <div class="input-group">
                    <input formControlName="email" class="form-control">
                </div>
            </div>
            <div class="form-group">
                <label for="phone">Phone</label>
                <div class="input-group">
                    <input formControlName="phone" class="form-control">
                </div>
            </div>
            <div class="form-group">
                <label for="website">Website</label>
                <div class="input-group">
                    <input formControlName="website" class="form-control">
                </div>
            </div>
            <div class="border text_center">
                <button data-dismiss="modal" class="btn btn-info" (click)="updateContent()">Save changes</button>
            </div>
        </form>
    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-outline-dark" (click)="modal.close('Save click')">Cancel</button>
    </div>
</ng-template>

我正在尝试编写没有后端的自动更新数据的函数。我认为应该使用数组(按键查找一些数据并将其更改为一个新的输入值)。你能帮我理解一下吗?我应该用哪种方法?

代码语言:javascript
复制
    export class ContactListComponent implements OnInit {
     
      contacts: Contact[] = [];
      editForm!: FormGroup;
      patchValue!: void;
      closeResult!: string;
      contact!: Contact;

      constructor(
        private httpClient: HttpClient,
        private fb: FormBuilder,
        private modalService: NgbModal
      ) { }

      ngOnInit(): void {
        this.updateContact();
        this.contacts = [];
        this.getContacts();
        this.editForm = this.fb.group({
          name: [''],
          username: [''],
          email: [''],
          phone: [''],
          website: ['']
        });
      }

      getContacts() {
        this.httpClient.get<any>('some url').subscribe(
          response => {
            console.log(response);
            this.contacts = response;
            localStorage.setItem('contacts', JSON.stringify(this.contacts));
            localStorage.getItem('contact');
          }
        );
      }
      

      openEdit(targetModal:any, contact:Contact) {
        this.modalService.open(targetModal, {
          centered: true,
          backdrop: 'static',
          size: 'lg'
        });
        this.editForm.patchValue({
          name: contact.name,
          username: contact.username,
          email: contact.email,
          phone: contact.phone,
          website: contact.website
        });
      }

      updateContact(): any {
        ???? problem is here
       }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-09 03:55:18

假设您没有任何不可变的字段(字段,您不允许用户编辑例如。当您选择更新联系人索引时,您将不得不存储它的索引,因为用户可以更改所有字段,并且您将无法判断哪个联系人已被更新。

例如在HTML中

代码语言:javascript
复制
<tr *ngFor="let contact of contacts;let i = index">
    <td><span>{{ contact.name }}</span></td>
    <td><span>{{ contact.username }}</span></td>
    <td><span>{{ contact.email }}</span></td>
    <td><span>{{ contact.phone }}</span></td>
    <td><span>{{ contact.website }}</span></td>
    <td><button class="edit-data" (click)="openEdit(contentEdit, contact, i)">Edit</button></td>
</tr>

并更新您的模态函数,以索引作为参数,以便它可以保存当前选定的联系人。

代码语言:javascript
复制
openEdit(targetModal:any, contact:Contact, contactIndex: number) {
    this.selectedContactIndex = contactIndex;
    this.modalService.open(targetModal, {
      centered: true,
      backdrop: 'static',
      size: 'lg'
    });
    this.editForm.patchValue({
      name: contact.name,
      username: contact.username,
      email: contact.email,
      phone: contact.phone,
      website: contact.website
    });
  }

然后,每当您更新更改时,只需在该索引处重写对象即可。

代码语言:javascript
复制
updateContact(): any {
    // Do your validations here
    const formValue = this.editForm.value;
    this.contacts[this.selectedContactIndex] = formValue;
}

PS:如果能有某种领域的话就更好了。contactId),用户在编辑联系人时不能更改,这样您保存更改的工作就更容易了。这样,您就可以使用Array.find通过使用contact id从数组中获取相应的对象,而不必将索引保存在某个地方。

票数 0
EN

Stack Overflow用户

发布于 2021-04-09 03:03:25

你试过回溯式数据库平台吗?就像火基地。我建议试试angularFire

就像,

代码语言:javascript
复制
updateContact(id: string, contact:Contact) {
  let doc = this.afs.collection('values', ref => ref.where('id', '==', id));
  doc.snapshotChanges().subscribe((res: any) => {
    let id = res[0].payload.doc.id;
    this.afs.collection('values').doc(id).update(contact);
  });
}

注意,如果您的id是唯一的,并且只返回一个查询结果,这应该可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67014364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档