javascript - funksjon er ikke definert ved HTMLButtonElement.onclick Angular 4


Jeg er ny på Angular og jeg har denne feilen:

"openClose er ikke definert ved HTMLButtonElement.onclick (index:13)"

Jeg søkte opp alle mulige svar på dette, men saken er at feilen er på indeks-siden og ikke i noen av app-filene. Jeg vil lime inn koden min her i håp om at noen vet hva som skal gjøres.

app.component.html

<button id="btn1" class="btn1" onclick="openClose(this, 'bg-modal')">Click me </button>
    <div class="bg-modal" id="bg-modal">
        <div class="modal-content">
      <div class="col-12">
        <div class="close" id="close">+</div>
        <h2>Modal</h2>
        <hr>
      </div>
      <div class="col-12">
        <div class="contents">
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
        </div>
        </div>
      <div class="confirm" id="confirm">OK</div>
      </div>
    </div>

app.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css',
  './video-style.css']
})
export class AppComponent {}

function openClose(btn1, bgmodal){
    document.getElementById('.btn1').addEventListener('click', function(){
    document.getElementById('.bg-modal').style.display='flex';
    });
}

index.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Modal</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">

</head>
<body>
<app-root></app-root>

</body>
</html>

Jeg har prøvd:

  • setter koden i app.component.ts mellom klammeparentesene til export class AppComponent {}

  • i index.html og lar bare

  • å legge koden for klikket i <script>-tagger i index.html, og så fungerer det med 0 feil

Kan noen hjelpe?

Svar #1

Slik skal det være. :

<button id="btn1" class="btn1" (click)="openClose($event, 'bg-modal')">Click me </button>

I Component.ts-filen. :

public openClose(event, bgmodal){
       .... rest of code 
    }

Merk at: Direkte tilgang til DOM-elementer anbefales ikke i Angular.

Bare for å få scenariet ditt til å fungere legger jeg til en Stackblitz-demo: Demo

Svar #2

onclick på knapp kan ikke kalle en funksjon fra komponenten, det må kalles med JavaScript-kode, f.eks.: onclick="console.log('sss')"

Hvis du vil kalle en funksjon i komponenten:

.html:

<button id="btn1" class="btn1" (click)="openClose(this, 'bg-modal')">Click me </button>

.ts:

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css',
  './video-style.css']
})
export class AppComponent {
    openClose(btn1, bgmodal){
        document.getElementById('.btn1').addEventListener('click', function(){
            document.getElementById('.bg-modal').style.display='flex';
        });
    }
}

Relaterte artikler