自定义指令
一个抽象的 Directive 基类,其 disconnected 方法将在包含该指令的部件因重新渲染而被清除时调用,或者当用户在之前渲染过包含该指令的部件上调用 part.setConnected(false) 时调用(例如,当 LitElement 与 DOM 断开连接时发生)。
导入
import { AsyncDirective } from 'lit/async-directive.js';详情
如果 part.setConnected(true) 随后在包含的部件上被调用,则指令的 reconnected 方法将在其下一个 update/render 回调之前被调用。在实现 disconnected 时,也应实现 reconnected 以与重新连接兼容。请注意,更新可能在指令断开连接时发生。因此,指令通常应该在渲染/更新期间检查 this.isConnected 标志,以确定是否可以安全地订阅可能阻止垃圾回收的资源。
方法和属性
new AsyncDirective(_partInfo): AsyncDirective
Permalink to constructor参数
- _partInfo
PartInfo
此指令的连接状态。
用于实现逻辑以释放此指令可能保留的任何资源/订阅的用户回调。由于指令也可能重新连接,因此应实现 reconnected 以在下次渲染之前恢复指令的工作状态。
参数
- props
Array<unknown>
在指令的正常 update/render 生命周期之外设置指令的 Part 的值。
参数
- value
unknown要设置的值
详情
此方法不应从指令的 update 或 render 中同步调用。
参数
- _part
Part- props
Array<unknown>
导入
import { AttributePart } from 'lit/async-directive.js';方法和属性
new AttributePart(element, name, strings, parent, options): AttributePart
Permalink to constructor参数
- element
HTMLElement- name
string- strings
ReadonlyArray<string>- parent
Disconnectable- options
undefined | RenderOptions
如果此属性部件代表一个插值,则它包含插值的静态字符串。对于单值、完整绑定,则为 undefined。
导入
import { BooleanAttributePart } from 'lit/async-directive.js';方法和属性
new BooleanAttributePart(element, name, strings, parent, options): BooleanAttributePart
Permalink to constructor参数
- element
HTMLElement- name
string- strings
ReadonlyArray<string>- parent
Disconnectable- options
undefined | RenderOptions
如果此属性部件代表一个插值,则它包含插值的静态字符串。对于单值、完整绑定,则为 undefined。
导入
import { ChildPart } from 'lit/async-directive.js';方法和属性
new ChildPart(startNode, endNode, parent, options): ChildPart
Permalink to constructor参数
- startNode
ChildNode- endNode
null | ChildNode- parent
undefined | ChildPart | TemplateInstance- options
undefined | RenderOptions
部分的尾部标记节点(如果有)。有关更多信息,请参见 .parentNode。
部分渲染其内容的父节点。
详情
ChildPart 的内容由 .parentNode 的一系列相邻子节点组成,可能以“标记节点”(.startNode 和 .endNode)为界。
- 如果
.startNode和.endNode都不是 null,则部分的内容包括.startNode和.endNode之间的所有同级节点(不包括这两个节点本身)。 - 如果
.startNode不是 null,但.endNode是 null,则部分的内容包括.startNode之后的所有同级节点,直至.parentNode的最后一个子节点(包括最后一个子节点)。如果.endNode不是 null,则.startNode始终不会是 null。 - 如果
.endNode和.startNode都是 null,则部分的内容包括.parentNode的所有子节点。
部分的起始标记节点(如果有)。有关更多信息,请参见 .parentNode。
从 Directive 类创建面向用户的指令函数。此函数与指令的 render() 方法具有相同的参数。
导入
import { directive } from 'lit/async-directive.js';签名
directive(c): (values: Parameters<InstanceType<C>["render"]>) => DirectiveResult<C>
参数
- c
C
用于创建自定义指令的基类。用户应扩展此类,实现 render 和/或 update,然后将子类传递给 directive。
导入
import { Directive } from 'lit/async-directive.js';方法和属性
new Directive(_partInfo): Directive
Permalink to constructor参数
- _partInfo
PartInfo
参数
- props
Array<unknown>
参数
- _part
Part- props
Array<unknown>
导入
import { ElementPart } from 'lit/async-directive.js';方法和属性
new ElementPart(element, parent, options): ElementPart
Permalink to constructor参数
- element
Element- parent
Disconnectable- options
undefined | RenderOptions
导入
import { EventPart } from 'lit/async-directive.js';方法和属性
new EventPart(element, name, strings, parent, options): EventPart
Permalink to constructor参数
- element
HTMLElement- name
string- strings
ReadonlyArray<string>- parent
Disconnectable- options
undefined | RenderOptions
如果此属性部件代表一个插值,则它包含插值的静态字符串。对于单值、完整绑定,则为 undefined。
参数
- event
Event
导入
import { PartType } from 'lit/async-directive.js';类型
{ATTRIBUTE: 1, BOOLEAN_ATTRIBUTE: 4, CHILD: 2, ELEMENT: 6, EVENT: 5, PROPERTY: 3}导入
import { PropertyPart } from 'lit/async-directive.js';方法和属性
new PropertyPart(element, name, strings, parent, options): PropertyPart
Permalink to constructor参数
- element
HTMLElement- name
string- strings
ReadonlyArray<string>- parent
Disconnectable- options
undefined | RenderOptions
如果此属性部件代表一个插值,则它包含插值的静态字符串。对于单值、完整绑定,则为 undefined。
导入
import { AttributePartInfo } from 'lit/async-directive.js';方法和属性
导入
import { ChildPartInfo } from 'lit/async-directive.js';方法和属性
导入
import { DirectiveClass } from 'lit/async-directive.js';此实用程序类型提取了指令类 render() 方法的签名,因此我们可以将其用于生成指令函数的类型。
导入
import { DirectiveParameters } from 'lit/async-directive.js';类型
Parameters<C["render"]>生成的指令函数不会评估指令,而只是返回一个 DirectiveResult 对象,该对象捕获了参数。
导入
import { DirectiveResult } from 'lit/async-directive.js';导入
import { ElementPartInfo } from 'lit/async-directive.js';方法和属性
导入
import { Part } from 'lit/async-directive.js';类型
ChildPart | AttributePart | PropertyPart | BooleanAttributePart | ElementPart | EventPart有关指令绑定到的部分的信息。
导入
import { PartInfo } from 'lit/async-directive.js';类型
ChildPartInfo | AttributePartInfo | ElementPartInfo详情
这对于检查指令是否附加到有效的部分很有用,例如只能在属性绑定上使用的指令。
导入
import { clearPart } from 'lit/directive-helpers.js';签名
clearPart(part): void
参数
- part
ChildPart
返回 ChildPart 的已提交值。
导入
import { getCommittedValue } from 'lit/directive-helpers.js';签名
getCommittedValue(part): unknown
参数
- part
ChildPart
详情
已提交的值用于变更检测和对部分的有效更新。在模板值在提交之前被转换的情况下,它可能与模板设置或指令设置的值不同。
TemplateResult会被提交为TemplateInstance- 可迭代项会被提交为
Array<ChildPart> - 所有其他类型都将提交为模板值或指令返回或设置的值。
检索 DirectiveResult 的 Directive 类。
导入
import { getDirectiveClass } from 'lit/directive-helpers.js';签名
getDirectiveClass(value): undefined | DirectiveClass
参数
- value
unknown
将 ChildPart 插入到给定容器 ChildPart 的 DOM 中,可以是容器 ChildPart 的末尾,也可以是在可选 refPart 之前。
导入
import { insertPart } from 'lit/directive-helpers.js';签名
insertPart(containerPart, refPart?, part?): ChildPart
参数
- containerPart
ChildPart要添加新 ChildPart 的 Part
- refPart?
ChildPart要添加新 ChildPart 的 Part 之前;省略时,该 Part 将添加到
containerPart的末尾- part?
ChildPart要插入的 Part,或未定义以创建新 Part
详情
这不会将该 Part 添加到 containerPart 的已提交值中。这必须由调用者完成。
测试一个值是否是 DirectiveResult。
导入
import { isDirectiveResult } from 'lit/directive-helpers.js';签名
isDirectiveResult(value): value
参数
- value
unknown
测试一个值是否是原始值。
导入
import { isPrimitive } from 'lit/directive-helpers.js';签名
isPrimitive(value): value
参数
- value
unknown
详情
参见 https://tc39.github.io/ecma262/#sec-typeof-operator
测试一个 Part 是否只有一个表达式,没有任何字符串在其中进行插值。
导入
import { isSingleExpression } from 'lit/directive-helpers.js';签名
isSingleExpression(part): boolean
参数
- part
PartInfo
详情
只有 AttributePart 和 PropertyPart 可以有多个表达式。多表达式 Part 有一个 strings 属性,而单表达式 Part 则没有。
测试一个值是否是 TemplateResult。
导入
import { isTemplateResult } from 'lit/directive-helpers.js';签名
isTemplateResult(value, type?): value
参数
- value
unknown- type?
TemplateResultType
从 DOM 中移除 ChildPart,包括其所有内容。
导入
import { removePart } from 'lit/directive-helpers.js';签名
removePart(part): void
参数
- part
ChildPart要移除的 Part
设置 Part 的值。
导入
import { setChildPartValue } from 'lit/directive-helpers.js';签名
setChildPartValue(part, value, directiveParent?): T
参数
- part
T要设置的 Part
- value
unknown要设置的值
- directiveParent?
DirectiveParent在内部使用;不应由用户设置
详情
请注意,这应该只用于设置/更新用户创建的 Part(即使用 insertPart 创建的 Part);它不应由指令用于设置指令的容器 Part 的值。指令应该从 update/render 中返回一个值以更新其 Part 状态。对于需要异步设置其 Part 值的指令,它们应该扩展 AsyncDirective 并调用 this.setValue()。
直接设置 ChildPart 的已提交值,而不触发该 Part 的提交阶段。
导入
import { setCommittedValue } from 'lit/directive-helpers.js';签名
setCommittedValue(part, value?): unknown
参数
- part
Part- value?
unknown
详情
这在指令需要更新 Part 以便下一次更新检测到值变更或不检测到值变更的情况下很有用。当省略 value 时,下一次更新将保证被检测为变更。
导入
import { TemplateResultType } from 'lit/directive-helpers.js';类型
{HTML: 1, SVG: 2}一个哨兵值,它表示一个值已由指令处理,不应写入 DOM。
导入
import { noChange } from 'lit';类型
symbol