Vorlagen im Microsoft Graph-Toolkit
Die meisten Komponenten des Microsoft Graph-Toolkits unterstützen die Verwendung benutzerdefinierter Vorlagen zum Ändern des Inhalts einer Komponente.
Alle Webkomponenten unterstützen Vorlagen, die auf dem <template>
-Element basieren. Um beispielsweise die Vorlage einer Komponente zu überschreiben, fügen Sie ein <template>
Element innerhalb einer Komponente hinzu.
<mgt-agenda>
<template data-type="event">
<div>{{event.subject}}</div>
<div data-for='attendee in event.attendees'>
<mgt-person person-query="{{attendee.emailAddress.name}}">
<template>
<div data-if="person.image">
<img src="{{person.image}}" />
</div>
<div data-else>
{{person.displayName}}
</div>
</template>
</mgt-person>
</div>
</template>
</mgt-agenda>
Wenn Sie das Microsoft Graph-Toolkit React Komponenten verwenden, können Sie React zum Erstellen von Vorlagen verwenden. Weitere Informationen finden Sie unter Verwenden des Toolkits mit React.
Datentyp
Jede Komponente kann über mehrere Teile verfügen, die Vorlagen enthalten können. Beispielsweise können Sie in der mgt-agenda
-Komponente einzelne Ereignisse, einzelne Abschnittsheader, Ladeansicht, keine Datenansicht und vieles mehr vorlagen. Verwenden Sie das -Attribut für eine Vorlage, um die data-type
Vorlage anzugeben. Verwenden Sie z. B. wie gezeigt den event
Datentyp, um jedes Ereignis im mgt-agenda
als Vorlage zu erstellen.
<mgt-agenda>
<template data-type="event"> </template>
</mgt-agenda>
Wenn kein data-type
angegeben ist, wird die gesamte Komponente durch die Vorlage ersetzt. Sie können auch für denselben Zweck verwenden data-type="default"
.
Binden von Daten
Viele Vorlagen ermöglichen die Bindung von Daten, die als Datenkontext an die Vorlage übergeben werden. Beispielsweise übergibt die event
Vorlage in der mgt-agenda
Komponente ein {event}
Objekt, das direkt in der Vorlage verwendet werden kann. Um einen Ausdruck wie event.subject
zu erweitern, verwenden Sie die doppelten geschweiften Klammern.
<template data-type="event">
<div>{{event.subject}}</div>
</template>
Dieses Format kann auch innerhalb von Attributen verwendet werden:
<template data-type="event">
<a href="{{ event.onlineMeetingUrl }}" />
</template>
Hinweis: Sie können auch Objekte wie
{{event}}
oder{{this}}
erweitern, die als JSON-Zeichenfolgen gerendert werden. Dies kann nützlich sein, wenn Sie die Vorlagen entwickeln.
Ändern der Bindungssyntax
Zum Erweitern eines Ausdrucks verwenden Sie standardmäßig doppelte geschweifte Klammern ( {{expression}}
). Sie können diese Syntax jedoch für Umgebungen ändern, in denen die Syntax mit doppelt geschweiften Klammern bereits verwendet wird. Im folgenden Beispiel werden beispielsweise doppelte eckige Klammern ( ) [[expression]]
verwendet.
import { TemplateHelper } from '@microsoft/mgt';
TemplateHelper.setBindingSyntax('[[', ']]');
Eigenschaften des Datenkontexthilfsprogramms
Die folgenden Eigenschaften können auch mit dem Datenkontextobjekt in Ihren Vorlagen verwendet werden.
Eigenschaft | Beschreibung |
---|---|
$index | Numerischer Index des Elements, das während der Schleife mit data-for gerendert wird. |
$parent | Wenn eine Vorlage in einer anderen Vorlage gerendert wird, können Sie mit dieser Eigenschaft auf den übergeordneten Datenkontext zugreifen. |
Das folgende Beispiel zeigt, wie die $index
-Eigenschaft in einer Data-for-Schleife verwendet wird.
<mgt-person>
<mgt-person-card>
<template data-type="additional-details">
<span data-for="language in languages">
{{ language.displayName }}<span data-if="$index < languages.length - 1">, </span>
</span>
</template>
</mgt-person-card>
</mgt-person>
{{this}}
Um den Datenkontext zu debuggen, können Sie in Ihren Bindungsausdrücken verwenden this
. Das einfachste Formular besteht darin, ihrer Vorlage eine beliebige Stelle hinzuzufügen {{this}}
.
<template data-type="event">
<div>
{{this}}
</div>
</template>
Da Sie JavaScript in Ihren Bindungsausdrücken verwenden können, haben Sie auch Zugriff auf das -Objekt, mit dem console
Sie (oder eine andere console
API) in Ihren Vorlagen verwenden console.log(this)
können.
<template data-type="event">
<div>
{{console.log(this)}}
</div>
</template>
Bedingtes Rendering
Möglicherweise möchten Sie Elemente nur rendern, wenn eine Bedingung basierend auf dem Datenkontext true oder false ist. Die data-if
Attribute und data-else
können einen Ausdruck auswerten und nur bei true oder false gerendert werden.
<mgt-person person-query="john doe">
<template>
<div data-if="person.image">
<img src="{{ person.image }}" />
</div>
<div data-else>
{{ person.displayName }}
</div>
</template>
</mgt-person>
Schleife
Es gibt Fälle, in denen das Datenkontextobjekt eine Schleife enthält und Sie eine Schleife über die Daten ausführen müssen. Verwenden Sie für dieses Szenario das data-for
-Attribut.
<template data-type="event">
<ul>
<li data-for='attendee in event.attendees'>
{{ attendee.displayName }}
</li>
</ul>
</template>
Vorlagenkontext
In Szenarien, in denen Sie Daten in Ihren Bindungen konvertieren, an Ereignisse binden oder nur externe Daten in Ihren Vorlagenbindungen verwenden müssen, unterstützen die Vorlagen die Bindung an den externen Datenkontext. Sie können zusätzlichen Vorlagenkontext auf zwei Arten hinzufügen:
Direkt auf der Komponente.
Jede Komponente definiert die
templateContext
-Eigenschaft, die Sie verwenden können, um zusätzliche Daten an jede Vorlage in der Komponente zu übergeben.document.querySelector('mgt-agenda').templateContext = { someObject: {}, formatDate: (date: Date) => { /* format date and return */ }, someEventHandler: (e) => { /* handleEvent */ } }
Die Eigenschaften im
templateContext
-Objekt sind jetzt für die Verwendung in den Bindungsausdrücken in der Vorlage verfügbar.Global für alle Komponenten.
Die
TemplateHelper
-Klasse macht dasglobalContext
-Objekt verfügbar, um Daten oder Funktionen hinzuzufügen, die für alle Komponenten global verfügbar sein sollten.import { TemplateHelper } from '@microsoft/mgt'; TemplateHelper.globalContext.someObject = {}; TemplateHelper.globalContext.formatDate = (date: Date) => { /* format date and return */ }; TemplateHelper.globalContext.someEventHandler = (e) => { /* handleEvent */ }
Konverter
In vielen Fällen möchten Sie die Daten möglicherweise transformieren, bevor Sie sie in der Vorlage darstellen. Sie können z. B. ein Datum ordnungsgemäß formatieren, bevor es gerendert wird. In diesen Fällen empfiehlt es sich möglicherweise, einen Vorlagenkonverter zu verwenden.
Um einen Vorlagenkonverter zu verwenden, müssen Sie zunächst eine Funktion definieren, die die Konvertierung durchführt. Sie können beispielsweise eine Funktion definieren, um ein Ereignisobjekt in einen formatierten Zeitbereich zu konvertieren.
document.querySelector('mgt-agenda').templateContext = {
getTimeRange: (event) => {
// TODO: format a string from the event object as you wish
// timeRange = ...
return timeRange;
}
}
Um den Konverter in Ihrer Vorlage zu verwenden, verwenden Sie ihn so, als ob Sie eine Funktion im CodeBehind verwenden würden.
<template data-type="event">
<div>{{ getTimeRange(event) }}</div>
</template>
Ereignis- oder Eigenschaftsbindung
Mit data-props
dem Attribut können Sie einen Ereignislistener hinzufügen oder einen Eigenschaftswert direkt in Ihren Vorlagen festlegen.
<template>
<button data-props="{{@click: myEvent, myProp: value}}"></button>
</template>
Die Dateneigenschaften akzeptieren eine durch Trennzeichen getrennte Zeichenfolge für jede Eigenschaft oder jeden Ereignishandler, die Sie festlegen möchten.
Um einen Ereignishandler hinzuzufügen, stellen Sie dem Namen des Ereignisses das Präfix voran @
. Der Ereignishandler muss in der templateContext
des -Elements verfügbar sein.
document.querySelector('mgt-agenda').templateContext = {
someEventHandler: (e, context, root) => { /* handleEvent */ }
}
<template>
<button data-props="{{@click: someEventHandler}}"></button>
</template>
Die Ereignisargumente, der Datenkontext und das Stammelement der Vorlage werden als Parameter an den Ereignishandler übergeben.
Vorlage gerendertes Ereignis
In bestimmten Fällen möchten Sie möglicherweise einen Verweis auf das gerenderte Element abrufen. Dies kann nützlich sein, wenn Sie das Rendern des Inhalts selbst verarbeiten oder das gerenderte Element ändern möchten.
In diesem Szenario können Sie das templateRendered
-Ereignis verwenden, das ausgelöst wird, nachdem die Vorlage gerendert wurde.
let agenda = document.querySelector('mgt-agenda');
agenda.addEventListener('templateRendered', (e) => { });
Die Ereignisdetails enthalten einen Verweis auf das element, das gerendert wird, das Datenkontextobjekt und den Typ der Vorlage.
agenda.addEventListener('templateRendered', (e) => {
let templateType = e.detail.templateType;
let dataContext = e.detail.context;
let element = e.detail.element;
if (templateType === 'event') {
element.querySelector('.some-button').addEventListener('click', () => {});
}
});
Styling
Die Vorlagen können normal über CSS formatiert werden, da sie außerhalb des Schattendoms gerendert werden.