Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Предостережение
Набор средств Microsoft Graph не рекомендуется использовать. Период выхода на пенсию начинается 1 сентября 2025 года, а полный выход на пенсию запланирован на 28 августа 2026 года. Разработчикам следует перейти на использование пакетов SDK для Microsoft Graph или других поддерживаемых средств Microsoft Graph для создания веб-интерфейсов. Дополнительные сведения см. в объявлении об устаревании.
Большинство компонентов Microsoft Graph Toolkit поддерживают использование пользовательских шаблонов для изменения содержимого компонента.
Все веб-компоненты поддерживают шаблоны на <template> основе элемента . Например, чтобы переопределить шаблон компонента, добавьте <template> элемент внутри компонента.
<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>
Если вы используете компоненты Microsoft Graph Toolkit React, вы можете использовать React для создания шаблонов. Дополнительные сведения см. в разделе Использование набора средств с React.
Тип данных
Каждый компонент может содержать несколько частей, которые можно шаблонировать. Например, в компоненте mgt-agenda можно шаблоновать отдельные события, заголовки отдельных разделов, представление загрузки, отсутствие представления данных и многое другое. Чтобы указать шаблон, используйте data-type атрибут в шаблоне. Например, чтобы создать шаблон для каждого события в mgt-agenda, используйте event тип данных, как показано ниже.
<mgt-agenda>
<template data-type="event"> </template>
</mgt-agenda>
Если значение не data-type указано, весь компонент будет заменен шаблоном. Вы также можете использовать data-type="default" для той же цели.
Привязка данных
Многие шаблоны позволяют привязывать данные, передаваемые шаблону в качестве контекста данных. Например, event шаблон в компоненте mgt-agenda передает {event} объект, который можно использовать непосредственно в шаблоне. Чтобы развернуть выражение, например event.subject, используйте двойные фигурные скобки.
<template data-type="event">
<div>{{event.subject}}</div>
</template>
Этот формат также можно использовать внутри атрибутов:
<template data-type="event">
<a href="{{ event.onlineMeetingUrl }}" />
</template>
Заметка: Вы также можете развернуть такие объекты, как
{{event}}или ,{{this}}и они будут отображаться в виде строк JSON. Это может быть полезно при разработке шаблонов.
Изменение синтаксиса привязки
По умолчанию для развертывания выражения используются двойные фигурные скобки ( {{expression}} ). Однако этот синтаксис можно изменить для сред, в которых уже используется синтаксис двойной фигурной скобки. Например, в следующем примере используются двойные квадратные скобки ( [[expression]] ).
import { TemplateHelper } from '@microsoft/mgt';
TemplateHelper.setBindingSyntax('[[', ']]');
Вспомогательные свойства контекста данных
Следующие свойства также можно использовать с объектом контекста данных в шаблонах.
| Свойство | Описание |
|---|---|
| $index | Числовой индекс элемента, отрисовываемого при цикле с data-forпомощью . |
| $parent | Если шаблон отображается внутри другого шаблона, это свойство позволяет получить доступ к родительскому контексту данных. |
В следующем примере показано, как использовать $index свойство в цикле data-for.
<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}}
Для отладки контекста данных можно использовать this в выражениях привязки. Простейшая форма — добавить {{this}} в любое место шаблона.
<template data-type="event">
<div>
{{this}}
</div>
</template>
Так как вы можете использовать JavaScript в выражениях привязки, у вас также есть доступ к объекту console , который позволяет использовать console.log(this) (или любой другой console API) в шаблонах.
<template data-type="event">
<div>
{{console.log(this)}}
</div>
</template>
Условная отрисовка
Отрисовка элементов может потребоваться только в том случае, если условие имеет значение true или false на основе контекста данных.
data-if Атрибуты и data-else могут вычислять выражение и отрисовывая только в том случае, если значение true или false.
<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>
Петлевание
Бывают случаи, когда объект контекста данных содержит цикл, и вам потребуется выполнить цикл над данными. В этом сценарии используйте data-for атрибут .
<template data-type="event">
<ul>
<li data-for='attendee in event.attendees'>
{{ attendee.displayName }}
</li>
</ul>
</template>
Контекст шаблона
В сценариях, когда необходимо преобразовать данные в привязках, привязать к событиям или просто использовать внешние данные в привязках шаблонов, шаблоны поддерживают привязку к контексту внешних данных. Добавить дополнительный контекст шаблона можно двумя способами:
Непосредственно на компоненте.
Каждый компонент определяет
templateContextсвойство, которое можно использовать для передачи дополнительных данных в любой шаблон компонента.document.querySelector('mgt-agenda').templateContext = { someObject: {}, formatDate: (date: Date) => { /* format date and return */ }, someEventHandler: (e) => { /* handleEvent */ } }Теперь свойства объекта
templateContextбудут доступны для использования в выражениях привязки в шаблоне.Глобально для всех компонентов.
Класс
TemplateHelperпредоставляетglobalContextобъект для добавления данных или функций, которые должны быть глобально доступны для всех компонентов.import { TemplateHelper } from '@microsoft/mgt'; TemplateHelper.globalContext.someObject = {}; TemplateHelper.globalContext.formatDate = (date: Date) => { /* format date and return */ }; TemplateHelper.globalContext.someEventHandler = (e) => { /* handleEvent */ }
Конвертеры
Во многих случаях может потребоваться преобразовать данные перед их представлением в шаблоне. Например, может потребоваться правильно отформатировать дату перед ее отображением. В таких случаях может потребоваться использовать преобразователь шаблонов.
Чтобы использовать преобразователь шаблонов, сначала необходимо определить функцию, которая будет выполнять преобразование. Например, можно определить функцию для преобразования объекта события в форматированный диапазон времени.
document.querySelector('mgt-agenda').templateContext = {
getTimeRange: (event) => {
// TODO: format a string from the event object as you wish
// timeRange = ...
return timeRange;
}
}
Чтобы использовать преобразователь в шаблоне, используйте его так, как если бы вы использовали функцию в коде программной части.
<template data-type="event">
<div>{{ getTimeRange(event) }}</div>
</template>
Привязка события или свойства
Атрибут data-props позволяет добавить прослушиватель событий или задать значение свойства непосредственно в шаблонах.
<template>
<button data-props="{{@click: myEvent, myProp: value}}"></button>
</template>
Data-props принимает строку с разделителями-запятыми для каждого свойства или обработчика событий, которые вы можете задать.
Чтобы добавить обработчик событий, введите префикс имени события с помощью @. Обработчик событий должен быть доступен в templateContext элементе .
document.querySelector('mgt-agenda').templateContext = {
someEventHandler: (e, context, root) => { /* handleEvent */ }
}
<template>
<button data-props="{{@click: someEventHandler}}"></button>
</template>
Аргументы событий, контекст данных и корневой элемент шаблона передаются обработчику событий в качестве параметров.
Событие, отрисованное шаблоном
В некоторых случаях может потребоваться получить ссылку на отрисованный элемент. Это может быть полезно, если вы хотите самостоятельно обрабатывать отрисовку содержимого или хотите изменить отрисованный элемент.
В этом сценарии можно использовать templateRendered событие, которое срабатывает после отрисовки шаблона.
let agenda = document.querySelector('mgt-agenda');
agenda.addEventListener('templateRendered', (e) => { });
Сведения о событии будут содержать ссылку на отрисовываемый элемент, объект контекста данных и тип шаблона.
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', () => {});
}
});
Стиль
Шаблоны можно стильировать обычно с помощью CSS, так как они отрисовываются за пределами теневой модели.