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';
});
}
}
