angular - แทรกองค์ประกอบที่สร้างด้วย javascript ลงใน primeng turbotable?
ฉันกำลังเปลี่ยนตารางที่สร้างเองเป็น turbotable ของ PrimeNG ฉันมีปุ่มบางปุ่มที่ต้องการแทรกลงในตารางซึ่งเรียกใช้ฟังก์ชันจาวาสคริปต์พิเศษที่ฉันเขียนไว้ แต่ฉันติดอยู่กับวิธีการแทรกองค์ประกอบลงในตาราง
มันแสดงเป็น [object HTMLInputElement] แทนที่จะเป็นปุ่ม ฉันรู้ว่าโค้ดที่สร้างปุ่มนั้นถูกต้อง เพราะมันทำงานได้ดีในตารางเก่า ฉันคิดว่าปัญหาคือ turbotable เปลี่ยนมันเป็นข้อความ และฉันไม่แน่ใจว่าจะทำให้มันคงเป็น HTML ได้อย่างไร
นี่คือสิ่งที่แสดงอยู่
นี่คือตารางเทอร์โบ
<p-table [columns]="resultsCols" [value]="results">
<ng-template pTemplate="caption">
Agencies Count {{results?.length}}
</ng-template>
<ng-template pTemplate="header">
<tr>
<th >Options</th>
<th [pSortableColumn]="'agency'" >Agency</th>
<th [pSortableColumn]="'department'" class="ui-p-2">Department</th>
<th [pSortableColumn]="'affiliateCount'" class="ui-p-4">Affiliate Count</th>
<th [pSortableColumn]="'basigdate'" class="ui-p-6">BA Sig Date</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-r>
<tr>
<td> {{r.btnEdit}}</td>
<td >{{r.agency}}</td>
<td class="ui-p-2">{{r.department}}</td>
<td class="ui-p-4">{{r.affiliateCount}}</td>
<td class="ui-p-6">{{r.basigdate}}</td>
</tr>
</ng-template>
</p-table>นี่คือวิธีที่ฉันสร้างปุ่มและเติมข้อมูลลงในอาเรย์ผลลัพธ์
var result = JSON.parse(xmlhttp.responseText);
for (var i = 0; i < result.length; i++) {
var inputEdit = document.createElement("input");
inputEdit.type = "button";
inputEdit.value = "Edit";
inputEdit.classList.add("btn-link");
inputEdit.onclick = (
function(i) {
return function() {
comp.setEditMode(i);
}
}
)(result[i].id);
var a = new agencySearchResult();
a.agency = result[i].name;
a.affiliateCount = result[i].affiliateCount;
a.basigdate = result[i].baSigDate;
a.department = result[i].department;
a.btnEdit = inputEdit;
comp.results.push(a);
}สุดท้าย นี่คือตำแหน่งที่ agencySearchResult ถูกกำหนดในไทป์สคริปต์
export class agencySearchResult {
constructor() {};
agency: string;
department: string;
affiliateCount: string;
basigdate: string;
btnEdit: HTMLInputElement;
}ฉันคิดว่าปัญหาอยู่ที่บรรทัด {{r.btnEdit}} ใน HTML แต่ฉันรวมทุกสิ่งที่เกี่ยวข้องไว้เผื่อไว้ด้วย
ดังนั้น อินเทอร์เน็ต คุณจะแทรกองค์ประกอบ HTML ที่สร้างด้วยจาวาสคริปต์ลงในตารางเทอร์โบอย่างไร?
คำตอบ #1
คุณควรเขียนปุ่ม HTML ของคุณภายในไฟล์ส่วนประกอบ HTML ของคุณแทนที่จะสร้างมันในโค้ด TS ของคุณ
ดังนั้นฉันจะแนะนำให้คุณเปลี่ยน
<td> {{r.btnEdit}}</td>
และ
var inputEdit = document.createElement("input");
inputEdit.type = "button";
inputEdit.value = "Edit";
inputEdit.classList.add("btn-link");
inputEdit.onclick = (
function(i) {
return function() {
comp.setEditMode(i);
}
}
)(result[i].id);
กับบางอย่างเช่น
<td><input type="button" value="Edit" class="btn-link" (click)="edit(r.id)"/></td>
และ
edit(rowId) {
alert('Edition of row ' + rowId);
// do whatever you need
}
ซึ่งกระชับและอ่านง่ายกว่าอย่างมาก
ดู StackBlitz นี้
