Функция forEach для добавления в angular?

Я уже сделал проект с помощью простого java-скрипта. Теперь его преобразование в SPA с использованием Angular. Теперь я вынужден делать то же самое с помощью Angular.

Функциональность:
Нажмите кнопку, чтобы отключить и добавить в частности div, и если кнопка нажимается внутри добавленного div, то ранее отключенная кнопка будет включена.

Вот и все.

Я сделал, кроме включения отключенной кнопки: Проблема в том, что pBtn недоступен в ElementRef

Ниже мой код и ссылка stackblitz:

Надеюсь, кто-то может помочь в этом.

import { Component, OnInit, DoCheck, AfterViewInit, ViewChild, ElementRef,Renderer2 } from '@angular/core';
import { Interviewcreate } from '../../shared/interview-create';
import { Interview } from '../../shared/interview';
import { DataService } from '../../data-service';
import { Router } from '@angular/router';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Component({
  selector: 'dashboard-component',
  templateUrl: './dashboard-component.html',
  styleUrls: [ './dashboard-component.css' ]
})
export class DashboardComponent implements OnInit, DoCheck, AfterViewInit, OnChanges {
  users: Interviewcreate;
  @ViewChild('answerbox') div:ElementRef;
  @ViewChild('htmlToAdd') htmlToAdd:ElementRef;
  @ViewChild('questionbox') questionbox:ElementRef;

  question1 = ['<p>', '</p>', 'Polar bears live in the north pole']
  constructor(private service: DataService,
              private router: Router,
              private http:HttpClient,
              private renderer: Renderer2,
              private el:ElementRef
            ){

  }
  ngOnInit(){

  }
  ngDoCheck(){
    if (this.htmlToAdd.nativeElement.children.length>0){
      Array.prototype.forEach.call(this.htmlToAdd.nativeElement.children, (element) => {
        //console.info(element)
        element.addEventListener('click', (e)=>{
          this.resultview()
          console.info(e)
          e.target.remove()
        })
      });
    }
  }
  ngAfterViewInit() {
    let sss = this.el.nativeElement.querySelector('.dotted-box > button')
                                  //.addEventListener('click', this.onClick.bind(this));
  }
  onClick(event) {
    console.info(event);
  }
  getvalue(e){
    const li = this.renderer.createElement('button');
    const text = this.renderer.createText(e.target.textContent);
    this.renderer.appendChild(li, text);
    this.renderer.appendChild(this.htmlToAdd.nativeElement, li);
    setTimeout(
      ()=>{
        this.resultview()
      }
      ,100)
    e.target.disabled = true;
    Array.prototype.forEach.call(this.htmlToAdd.nativeElement.children, (element) => {
      this.renderer.addClass(element, 'btn');
      this.renderer.addClass(element, 'btn-outline-primary');
    });
  }
  resultview() {
    this.div.nativeElement.innerHTML = this.htmlToAdd.nativeElement.textContent.trim();
  }

}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
98
1

Ответы 1

Попробуйте это, вы написали жесткую логику. Добавление значения push решит вашу проблему.

export class DashboardComponent {
  @ViewChild('answerbox') div:ElementRef;
  @ViewChild('htmlToAdd') htmlToAdd:ElementRef;
  @ViewChild('questionbox') questionbox:ElementRef;

  question1 = ['<p>', '</p>', 'Polar bears live in the north pole' ]
  questionboxvalue = [];
  @Output() someEvent = new EventEmitter<string>();

  constructor(private service: DataService,
    private router: Router,
    private http:HttpClient,
    private renderer: Renderer2,
    private el:ElementRef
  ){
    }

  onClick(event) {
    console.info(event);
  }
  getvalue(e){
    this.questionboxvalue.push({index: e.target.dataset.index, value: e.target.textContent.trim()})
    e.target.disabled = true;
    this.resultview();
  }
  getbvalue(event) {
    this.someEvent.next(event);
    Array.prototype.forEach.call(this.el.nativeElement.querySelectorAll('.shadowbutton'), (element, i)=>{
      if (element.dataset.index === event.target.dataset.index) {
          element.disabled = false;
          this.questionboxvalue = this.questionboxvalue.filter((val)=>{
            return val.index !== event.target.dataset.index;
          })
          this.resultview()
        }
    })

  }
  resultview() {
    setTimeout(()=>{
      this.div.nativeElement.innerHTML = this.htmlToAdd.nativeElement.textContent.trim();
    }, 100)

  }

}

Другие вопросы по теме