自訂指令

一個抽象的 Directive 基底類別,當包含指令的部分因重新渲染而被清除,或是當使用者在先前渲染包含指令的部分上呼叫 part.setConnected(false) 時,會呼叫其 disconnected 方法(例如,當 LitElement 從 DOM 斷開連線時)。

導入

詳細資訊

如果後續在包含的部分上呼叫 part.setConnected(true),則會在指令的下一個 update/render 回呼之前呼叫指令的 reconnected 方法。實作 disconnected 時,也應實作 reconnected 以與重新連線相容。請注意,更新可能會在指令斷開連線時發生。因此,指令通常應在 render/update 期間檢查 this.isConnected 旗標,以判斷訂閱可能會阻止垃圾回收的資源是否安全。

方法和屬性

參數
_partInfo
PartInfo

此指令的連線狀態。

用於實作邏輯以釋放可能被此指令保留的任何資源/訂閱的使用者回呼。由於指令也可能會重新連線,因此也應實作 reconnected,以在下一次渲染之前還原指令的工作狀態。

參數
props
Array<unknown>

在指令的正常 update/render 生命周期之外,設定指令的 Part 值。

參數
value
unknown

要設定的值

詳細資訊

不應從指令的 updaterender 同步呼叫此方法。

參數
_part
Part
props
Array<unknown>

導入

方法和屬性

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

連結到建構子的永久連結
參數
element
MDN 繁體中文HTMLElement
name
string
strings
ReadonlyArray<string>
parent
Disconnectable
options
undefined | RenderOptions

readonly strings?: ReadonlyArray<string>

連結到 strings 的永久連結檢視原始碼

如果此屬性部分表示一個插值,則此屬性包含插值的靜態字串。對於單值、完整的綁定,此屬性為未定義。

導入

方法和屬性

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

連結到建構子的永久連結
參數
element
MDN 繁體中文HTMLElement
name
string
strings
ReadonlyArray<string>
parent
Disconnectable
options
undefined | RenderOptions

readonly strings?: ReadonlyArray<string>

連結到 strings 的永久連結檢視原始碼

如果此屬性部分表示一個插值,則此屬性包含插值的靜態字串。對於單值、完整的綁定,此屬性為未定義。

導入

方法和屬性

new ChildPart(startNode, endNode, parent, options): ChildPart

連結到建構子的永久連結
參數
startNode
ChildNode
endNode
null | ChildNode
parent
undefined | ChildPart | TemplateInstance
options
undefined | RenderOptions

此部分的尾端標記節點(如果有的話)。請參閱 .parentNode 以取得更多資訊。

此部分將其內容渲染至其中的父節點。

詳細資訊

ChildPart 的內容由 .parentNode 的一組相鄰子節點組成,可能以「標記節點」(.startNode.endNode)為邊界。

  • 如果 .startNode.endNode 皆非 null,則此部分的內容由 .startNode.endNode 之間的所有同層節點組成(不包含 .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

導入

方法和屬性

參數
_partInfo
PartInfo
參數
props
Array<unknown>

update(_part, props): unknown

連結到 update 檢視原始碼
參數
_part
Part
props
Array<unknown>

導入

導入

方法和屬性

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

連結到建構子的永久連結
參數
element
MDN 繁體中文HTMLElement
name
string
strings
ReadonlyArray<string>
parent
Disconnectable
options
undefined | RenderOptions

readonly strings?: ReadonlyArray<string>

連結到 strings 檢視原始碼

如果此屬性部分表示一個插值,則此屬性包含插值的靜態字串。對於單值、完整的綁定,此屬性為未定義。

參數
event
Event

導入

類型

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

導入

方法和屬性

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

連結到建構子的永久連結
參數
element
MDN 繁體中文HTMLElement
name
string
strings
ReadonlyArray<string>
parent
Disconnectable
options
undefined | RenderOptions

readonly strings?: ReadonlyArray<string>

連結到 strings 檢視原始碼

如果此屬性部分表示一個插值,則此屬性包含插值的靜態字串。對於單值、完整的綁定,此屬性為未定義。

導入

方法和屬性

readonly strings?: ReadonlyArray<string>

連結到 strings 檢視原始碼

readonly type: 1 | 3 | 4 | 5

type 的永久連結 檢視原始碼

導入

方法和屬性

導入

方法和屬性

參數
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 的部件

refPart?
ChildPart

要在其之前新增新 ChildPart 的部件;省略時,會將部件新增至 containerPart 的結尾

part?
ChildPart

要插入的部件,或 undefined 以建立新部件

詳細資訊

這不會將部件新增至 containerPart 的已提交值。必須由呼叫端執行此操作。

測試值是否為 DirectiveResult。

導入

簽名

isDirectiveResult(value): value

參數

value
unknown

測試值是否為基本值。

導入

簽名

isPrimitive(value): value

參數

value
unknown

詳細資訊

請參閱 https://tc39.github.io/ecma262/#sec-typeof-operator

測試部件是否只有單一運算式,且沒有要在中間插入的字串。

導入

簽名

isSingleExpression(part): boolean

參數

part
PartInfo

詳細資訊

只有 AttributePart 和 PropertyPart 可以有多個運算式。多運算式部件具有 strings 屬性,而單運算式部件則沒有。

測試值是否為 TemplateResult。

導入

簽名

isTemplateResult(value, type?): value

參數

value
unknown
type?
TemplateResultType

從 DOM 移除 ChildPart,包括其任何內容。

導入

簽名

removePart(part): void

參數

part
ChildPart

要移除的部件

設定部件的值。

導入

簽名

setChildPartValue(part, value, directiveParent?): T

參數

part
T

要設定的部件

value
unknown

要設定的值

directiveParent?
DirectiveParent

內部使用;不應由使用者設定

詳細資訊

請注意,這只應用於設定/更新使用者建立的部件的值(即使用 insertPart 建立的部件);它不應由指令用來設定指令的容器部件的值。指令應從 update/render 傳回一個值,以更新其部件狀態。對於需要非同步設定其部件值的指令,它們應擴充 AsyncDirective 並呼叫 this.setValue()

直接設定 ChildPart 的已提交值,而不會觸發部件的提交階段。

導入

簽名

setCommittedValue(part, value?): unknown

參數

part
Part
value?
unknown

詳細資訊

這在指令需要更新部分,以便下次更新時偵測到數值是否變更的情況下很有用。當省略值時,會保證下次更新將被偵測為變更。

導入

類型

{HTML: 1, SVG: 2}

一個哨兵值,表示數值已由指令處理,不應寫入 DOM。

導入

類型

符號