自定义指令

一个抽象的 Directive 基类,其 disconnected 方法将在包含该指令的部件因重新渲染而被清除时调用,或者当用户在之前渲染过包含该指令的部件上调用 part.setConnected(false) 时调用(例如,当 LitElement 与 DOM 断开连接时发生)。

导入

详情

如果 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

要设置的值

详情

此方法不应从指令的 updaterender 中同步调用。

update(_part, props): unknown

Permalink to update 查看源代码
参数
_part
Part
props
Array<unknown>

导入

方法和属性

new AttributePart(element, name, strings, parent, options): AttributePart

Permalink to constructor
参数
element
MDNHTMLElement
name
string
strings
ReadonlyArray<string>
parent
Disconnectable
options
undefined | RenderOptions

readonly strings?: ReadonlyArray<string>

Permalink to strings 查看源代码

如果此属性部件代表一个插值,则它包含插值的静态字符串。对于单值、完整绑定,则为 undefined。

readonly type: 1 | 3 | 4 | 5

Permalink to type 查看源代码

导入

方法和属性

new BooleanAttributePart(element, name, strings, parent, options): BooleanAttributePart

Permalink to constructor
参数
element
MDNHTMLElement
name
string
strings
ReadonlyArray<string>
parent
Disconnectable
options
undefined | RenderOptions

readonly strings?: ReadonlyArray<string>

Permalink to strings 查看源代码

如果此属性部件代表一个插值,则它包含插值的静态字符串。对于单值、完整绑定,则为 undefined。

导入

方法和属性

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() 方法具有相同的参数。

导入

签名

directive(c): (values: Parameters<InstanceType<C>["render"]>) => DirectiveResult<C>

参数

c
C

用于创建自定义指令的基类。用户应扩展此类,实现 render 和/或 update,然后将子类传递给 directive

导入

方法和属性

new Directive(_partInfo): Directive

Permalink to constructor
参数
_partInfo
PartInfo
参数
props
Array<unknown>

update(_part, props): unknown

update 的永久链接 查看源代码
参数
_part
Part
props
Array<unknown>

导入

导入

方法和属性

new EventPart(element, name, strings, parent, options): EventPart

Permalink to constructor
参数
element
MDNHTMLElement
name
string
strings
ReadonlyArray<string>
parent
Disconnectable
options
undefined | RenderOptions

readonly strings?: ReadonlyArray<string>

strings 的永久链接 查看源代码

如果此属性部件代表一个插值,则它包含插值的静态字符串。对于单值、完整绑定,则为 undefined。

参数
event
Event

导入

类型

{ATTRIBUTE: 1, BOOLEAN_ATTRIBUTE: 4, CHILD: 2, ELEMENT: 6, EVENT: 5, PROPERTY: 3}

导入

方法和属性

new PropertyPart(element, name, strings, parent, options): PropertyPart

Permalink to constructor
参数
element
MDNHTMLElement
name
string
strings
ReadonlyArray<string>
parent
Disconnectable
options
undefined | RenderOptions

readonly strings?: ReadonlyArray<string>

strings 的永久链接 查看源代码

如果此属性部件代表一个插值,则它包含插值的静态字符串。对于单值、完整绑定,则为 undefined。

导入

方法和属性

readonly strings?: ReadonlyArray<string>

strings 的永久链接 查看源代码

导入

导入

方法和属性

参数
part
PartInfo

此实用程序类型提取了指令类 render() 方法的签名,因此我们可以将其用于生成指令函数的类型。

导入

类型

Parameters<C["render"]>

生成的指令函数不会评估指令,而只是返回一个 DirectiveResult 对象,该对象捕获了参数。

导入

导入

导入

类型

ChildPart | AttributePart | PropertyPart | BooleanAttributePart | ElementPart | EventPart

有关指令绑定到的部分的信息。

导入

类型

ChildPartInfo | AttributePartInfo | ElementPartInfo

详情

这对于检查指令是否附加到有效的部分很有用,例如只能在属性绑定上使用的指令。

导入

签名

clearPart(part): void

参数

part
ChildPart

返回 ChildPart 的已提交值。

导入

签名

getCommittedValue(part): unknown

参数

part
ChildPart

详情

已提交的值用于变更检测和对部分的有效更新。在模板值在提交之前被转换的情况下,它可能与模板设置或指令设置的值不同。

  • TemplateResult 会被提交为 TemplateInstance
  • 可迭代项会被提交为 Array<ChildPart>
  • 所有其他类型都将提交为模板值或指令返回或设置的值。

检索 DirectiveResult 的 Directive 类。

导入

签名

getDirectiveClass(value): undefined | DirectiveClass

参数

value
unknown

将 ChildPart 插入到给定容器 ChildPart 的 DOM 中,可以是容器 ChildPart 的末尾,也可以是在可选 refPart 之前。

导入

签名

insertPart(containerPart, refPart?, part?): ChildPart

参数

containerPart
ChildPart

要添加新 ChildPart 的 Part

refPart?
ChildPart

要添加新 ChildPart 的 Part 之前;省略时,该 Part 将添加到 containerPart 的末尾

part?
ChildPart

要插入的 Part,或未定义以创建新 Part

详情

这不会将该 Part 添加到 containerPart 的已提交值中。这必须由调用者完成。

测试一个值是否是 DirectiveResult。

导入

签名

isDirectiveResult(value): value

参数

value
unknown

测试一个值是否是原始值。

导入

签名

isPrimitive(value): value

参数

value
unknown

详情

参见 https://tc39.github.io/ecma262/#sec-typeof-operator

测试一个 Part 是否只有一个表达式,没有任何字符串在其中进行插值。

导入

签名

isSingleExpression(part): boolean

参数

part
PartInfo

详情

只有 AttributePart 和 PropertyPart 可以有多个表达式。多表达式 Part 有一个 strings 属性,而单表达式 Part 则没有。

测试一个值是否是 TemplateResult。

导入

签名

isTemplateResult(value, type?): value

参数

value
unknown
type?
TemplateResultType

从 DOM 中移除 ChildPart,包括其所有内容。

导入

签名

removePart(part): void

参数

part
ChildPart

要移除的 Part

设置 Part 的值。

导入

签名

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 的提交阶段。

导入

签名

setCommittedValue(part, value?): unknown

参数

part
Part
value?
unknown

详情

这在指令需要更新 Part 以便下一次更新检测到值变更或不检测到值变更的情况下很有用。当省略 value 时,下一次更新将保证被检测为变更。

导入

类型

{HTML: 1, SVG: 2}

一个哨兵值,它表示一个值已由指令处理,不应写入 DOM。

导入

类型

symbol