自定义指令
一个抽象的 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
要设置的值
详情
此方法不应从指令的 update
或 render
中同步调用。
参数
- _part
Part
- props
Array<unknown>
导入
方法和属性
new AttributePart(element, name, strings, parent, options): AttributePart
Permalink to constructor参数
- element
HTMLElement
- name
string
- strings
ReadonlyArray<string>
- parent
Disconnectable
- options
undefined | RenderOptions
如果此属性部件代表一个插值,则它包含插值的静态字符串。对于单值、完整绑定,则为 undefined。
导入
方法和属性
new BooleanAttributePart(element, name, strings, parent, options): BooleanAttributePart
Permalink to constructor参数
- element
HTMLElement
- name
string
- strings
ReadonlyArray<string>
- parent
Disconnectable
- options
undefined | RenderOptions
如果此属性部件代表一个插值,则它包含插值的静态字符串。对于单值、完整绑定,则为 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>
参数
- _part
Part
- props
Array<unknown>
导入
方法和属性
new ElementPart(element, parent, options): ElementPart
Permalink to constructor参数
- element
Element
- parent
Disconnectable
- options
undefined | RenderOptions
导入
方法和属性
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
导入
类型
{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
HTMLElement
- name
string
- strings
ReadonlyArray<string>
- parent
Disconnectable
- options
undefined | RenderOptions
如果此属性部件代表一个插值,则它包含插值的静态字符串。对于单值、完整绑定,则为 undefined。
导入
方法和属性
导入
方法和属性
导入
此实用程序类型提取了指令类 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