Сбросить элемент, отмеченный после закрытия модального окна - PullRequest
0 голосов
/ 17 июня 2020

В моем модальном окне все мои элементы не отмечены при первом открытии. Когда я проверяю элемент (ы), закрываю модальное окно и снова открываю его, я хочу, чтобы все мои элементы снимались, как при первом открытии. Теперь, когда я проверяю элемент и снова открываю модальное окно, этот элемент остается отмеченным. Что я могу сделать для решения этой проблемы?

Модальный родительский компонент. html

<app-modal [show]="showModal" [customClass]="'custom_modal_class'" [closeCallback]="closeWithoutSending">

            <div class ="body">
                <div class="header">  
                    <br>
                    <input type="textarea" placeholder="Type your message here..." [(ngModel)]="userContent"> &nbsp;
                    <br>
                    <label class="btn btn-default">
                        <input type="file" hidden (change)="pickFile($event)">
                    </label>
                    <button (click)="toggleModal()">
                        <span>Envoyer</span>
                    </button>
                    <br>
                </div>

                <div class="content">
                    <app-contact  (contactEventEmitter)="onCheckContact($event)"           
                    *ngFor="let contact of contacts; let i = index"
                      [indexOfContact]="i"
                      [contactName] ="contact.itemName"
                      [(contact)]="contact"
                      >
                    </app-contact>
                </div>
                <br>
                <div class="content">
                    <app-groupe (groupEventEmitter)="onCheckGroup($event)"              
                    *ngFor="let group of groups; let i = index"
                    [indexOfGroup]="i"
                    [groupName] ="group.itemName"
                    [group] ="group" >
                    </app-groupe>
                </div> 

            </div>               





        </app-modal> 

родительский компонент. js

....  

    onCheckContact(contact) {

       if (!this.selectedContacts.includes(contact)) {
            this.selectedContacts.push(contact);
        } else {

          for(let i in this.selectedContacts){
            if(this.selectedContacts[i].phone === contact.phone){
              var index = this.selectedContacts.indexOf(this.selectedContacts[i]);
              console.log('index '+index+' i '+i);
              if (index > -1) {
                this.selectedContacts.splice(index, 1);
              } 
            }
          }

        }
          for(let i in this.selectedContacts){
            console.log(' Selected  i '+i+' Contacts name '+this.selectedContacts[i].itemName+' phone '+this.selectedContacts[i].phone);
          }
         // alert('Selected Contacts '+this.selectedContacts);

        }

....


closeWithoutSending = () => {
  this.showModal = !this.showModal;
  this.selectedContacts = [];
}

Дочерний компонент :

contact.component. html:

<div class="head">

    <div class="item-checkbox">
        <label>{{ contact.itemName }}<input type="checkbox" class="custom-control-input" id= "indexOfContact" [(checked)]="contact.selected" (change)="onCheckContact(contact)"></label>
      </div>
</div>

contact.component. js

import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { Contact } from '../models/Contact.model';

@Component({
  selector: 'app-contact',
  templateUrl: './contact.component.html',
  styleUrls: ['./contact.component.scss']
})
export class ContactComponent implements OnInit {
  @Input() contactName: string;
  @Input() indexOfContact: number;
  @Input()contact:Contact;
  @Output() contactEventEmitter = new EventEmitter<string>();
  @Input() selected:boolean;

  constructor() { }

  ngOnInit() {


  }

  onCheckContact(contact) {
        console.log(' Selected  Contact '+contact.itemName);
        this.contactEventEmitter.emit(contact);
        this.selected = true;

    }

}

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

@ Ayu sh Walia Я тоже пробовал

родительский

<app-contact  (contactEventEmitter)="onCheckContact($event)"           
                        *ngFor="let contact of contacts; let i = index"
                          [indexOfContact]="i"
                          [contactName] ="contact.itemName"
                          [(contact)]="contact"
                          [selected]="false"
                          >
                        </app-contact>

и дочерний

<div class="item-checkbox"> <label>{{ contact.itemName }}<input type="checkbox" class="custom-control-input" id= "indexOfContact" [(checked)]="selected" (change)="onCheckContact(contact)"></label> </div> 
0 голосов
/ 17 июня 2020

Попробуйте изменить:

closeWithoutSending = () => {
  this.showModal = !this.showModal;
  this.selectedContacts = [];
}

на это:

closeWithoutSending = () => {
  this.showModal = !this.showModal;
  this.selectedContacts.forEach(c => c.selected = false);
  this.selectedContacts = [];
}

Объекты передаются по ссылке от Родителя к Дочернему. Поэтому, если вы хотите его очистить, вам, возможно, придется сбросить данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...