У меня есть веб-страница, которая использует Angular и маршрутизирует данные из файла TS. Все работает, кроме (нажмите).
Если я помещаю SVG с функцией (click) непосредственно в HTML, это работает, но если я вызываю SVG из файла TS, это не так. Если я удаляю (щелкните) = linkOpen (), ссылка продолжает открываться в новом окне; если я удалю target = iframe, ссылка откроется в текущей вкладке.
project.component.html:
<div class="page" *ngIf="project$ | async as project">
<div [innerHTML]="svgHTML(project)"></div>
</div>
project.component.ts:
import { Component, OnInit, Injectable } from '@angular/core';
import { ActivatedRoute, Router, ParamMap } from '@angular/router';
import { switchMap } from 'rxjs/operators';
import { Observable } from 'rxjs';
import { DomSanitizer } from '@angular/platform-browser';
import { CopeAdditionsService } from '../cope-additions.service';
import { Project } from '../project';
@Component({
selector: 'app-project',
templateUrl: './project.component.html',
styleUrls: ['./project.component.css']
})
@Injectable()
export class ProjectComponent implements OnInit {
display: boolean;
project$: Observable<Project>;
constructor(
private route: ActivatedRoute,
private router: Router,
private service: CopeAdditionsService,
public sanitizer: DomSanitizer
) {
this.display = false;
}
ngOnInit() {
this.project$ = this.route.paramMap.pipe(
switchMap((params: ParamMap) =>
this.service.getProject(params.get('id')))
);
}
gotoProjects(project: Project) {
let projectId = project ? project.id : null;
this.router.navigate(['/cope-additions', { id: projectId }]);
}
linkOpen() {
if (window.innerWidth >= 600) {
this.display = true;
document.getElementById('imgLink').setAttribute('target', 'iframe');
} else {
this.display = false;
document.getElementById('imgLink').setAttribute('target', '_self');
}
}
svgHTML(project) {
return this. sanitizer.bypassSecurityTrustHtml(project.SVG);
}
}
проект-details.ts:
SVG:`
<svg class=\'svg\' fill=\'transparent\' id=\'svg5\' xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 476 612\'>
<a href=\'/cope-additions/5/lot/15\' id=\'imgLink\' target=\'iframe\' (click)=\'linkOpen()\'><rect class=\'lot-for-sale\' x=\'64\' y=\'40\' width=\'125.5\' height=\'95\' alt=\'B-1\'><title>lot for sale</title></rect></a>
</svg>`
Вместо открытия в iframe, ссылка открывается в новой вкладке, кроме мобильной, где она вообще не открывается. Перед перемещением SVG в файл TS (он был непосредственно в файле HTML), ссылка также не открывалась на мобильном устройстве, хотя linkOpen () работал / работает, как и ожидалось, при использовании инспектора Chrome для предварительного просмотра в качестве устройства.