【发布时间】:2020-03-04 15:48:07
【问题描述】:
我正在尝试通过单击屏幕中的添加按钮添加产品图片并使用删除按钮删除。这些应该在用户单击添加或删除按钮时动态加载。但是当我动态注入 html 并绑定单击事件时,它不起作用。单击它时,函数未调用。我已经简化了 下面的代码。 HTML 文件:
<div class="product_images">
<div class="imageHeading">
<p>
Images
</p>
</div>
<div class="kt-form__group">
<div class="row">
<div class="col-lg-2 imageLabel">Main Image</div>
<div class="col-lg-3 imageLabel">Choose Image</div>
<div class="col-lg-2 imageLabel">Image</div>
<div class="col-lg-2 imageLabel">Actions</div>
</div>
</div>
<div class="imagesContainer" [innerHtml]="containerToAdd | sanitizeHtml">
</div>
</div>
Ts 文件
// Angular
import { Component, OnInit, ElementRef, ViewChild, ChangeDetectionStrategy, OnDestroy, ChangeDetectorRef } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
// Material
import { SelectionModel } from '@angular/cdk/collections';
import { MatPaginator, MatSort, MatSnackBar, MatDialog, MatRadioButton } from '@angular/material';
import { ProductManagementService } from '../../../../../core/e-commerce/_services/product-management.service';
import { ToastrService } from 'ngx-toastr';
import { ViewEncapsulation } from '@angular/core';
@Component({
selector: 'kt-product-edit',
templateUrl: './product-edit.component.html',
styleUrls: ['./product-edit.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class ProductEditComponent implements OnInit {
previewUrl : any = "/assets/media/images/noimage.jpg";
containerToAdd : string = "";
constructor(
private products: ProductManagementService,
private router: Router,
private route: ActivatedRoute,
private toastr: ToastrService,
private cdr: ChangeDetectorRef,
private FB: FormBuilder,
) {
}
ngOnInit() {
this.addImage();
}
addImage(){
this.containerToAdd = `
"<div class="kt-form__group image-container container-1">
<div class="row">
<div class="col-lg-2"><input type="checkbox" /></div>
<div class="col-lg-3"><input type="file" accept="image/*" (change)="imagePreview($event)" /></div>
<div class="col-lg-2"><img [src]="previewUrl" class="prod_image" /></div>
<div class="col-lg-2">
<span class="deleteElement" (click)="deleteImage()">
Del
</span>
</div>
</div>
</div>"`;
}
deleteImage() {
console.log("deleteImage");
}
}
当我使用该单击事件单击该跨度时,deleteImage() 函数不会调用。
【问题讨论】:
-
将
deleteImage移出addImage。 -
不确定 Angular 但在内联 JS 中,您将函数引用传递给 onlick:
<span class="deleteElement" (click)="deleteImage"> -
@marekful 在angular中使用
(click)="someFunction()"是正确的。 -
@JDunken 仅在 addImage 函数之外
-
无法通过 innerHTML 使用 JSX 属性,我们将不支持。相反,我建议在您的 render() 函数中使用 if 语句有条件地显示按钮。这样,您可以动态添加和删除按钮,并使用 JSX onClick,并检查所有类型。供参考:github.com/ionic-team/stencil/issues/692
标签: javascript angular typescript dynamic angular8