Bei der Entwicklung einer Web-App mit jQuery oder normalem JavaScript ist es üblich, zunächst nach der Verfügbarkeit von Funktionen zu suchen. So zum Beispiel, wenn ich das document.oncopy
Ereignis verwenden möchten, sollte ich zuerst so etwas wie dieses muss meinen Code nicht gewährleistet, für kleinere Browser brechen:Angular Universal- und Browser-Funktionsüberprüfungen
if ("oncopy" in document) {
// Feature is available
}
Ich bin ein wenig verwirrt darüber, wie dies funktionieren würde in Angular2. Ich könnte immer noch das selbe verwenden, wenn ich erwarte, nur im Browser zu laufen, aber mir wird ausdrücklich gesagt, das DOM allein zu lassen, wenn ich Angular Universal verwenden möchte und stattdessen auf Vorlagen oder den DomRenderer angewiesen bin. Dadurch kann die Seite auf dem Server vorgerendert werden und bietet einen wirklich beeindruckenden Leistungsgewinn.
Aber angenommen, ich möchte ein bestimmtes Div unsichtbar sein, wenn die document.oncopy
nicht verfügbar ist. Mein Verständnis ist, dass dies nicht empfohlen wird:
<div *ngIf="hasFeature()">...</div>
und
hasFeature() {
return 'oncopy' in document;
}
denn dann bin ich immer noch den DOM zu manipulieren. Beachten Sie, dass mein Beispiel über die document.oncopy
ist, aber ich könnte jede Funktion wählen, die keine universelle Unterstützung hat.
<div *ngIf="hasFeature()">Feature is supported</div>
<div *ngIf="!hasFeature()">Feature is NOT supported</div>
Update:: Folgendes Ende seiner Startseite Vorlage
Getestet habe ich dies mit Chris Nwamba's tutorial auf Scotch und hinzugefügt Interessanterweise gab unterschiedliche Ergebnisse auf verschiedenen Browsern. In Chrome 55 wurde es wie gewohnt ausgeführt und zeigte die Meldung "Feature wird unterstützt". Auf IE11 habe ich die Nachricht "nicht unterstützt" erhalten. In beiden Fällen zeigt das Serverprotokoll eine Nachricht EXCEPTION: document is not defined
, aber die Seite scheint immer noch vollkommen in Ordnung zu sein.
Was ist der richtige Weg, um nach Browserfunktionen zu suchen, wenn ich Angular Universal verwenden möchte?
Update: Ich spielte um auch mit einem Feld in der Vorlage und das Feldes von einem der life cycle hooks zuweisen. ngAfterContentInit
schien ein guter Kandidat, verursacht aber auch einen Fehler auf dem Server. Es läuft immer noch gut im Browser ohne merkwürdige Effekte (die ich bisher bemerkt habe).