自定義指令macro

2021-09-02 09:23:28 字數 1632 閱讀 1523

巨集引數的真實值是可以作為變數(person)放在巨集定義體中的。使用預定義指令時,引數的值(=號後邊的值)可以是ftl表示式。這樣,不像html,"fred"和"batman"的引號就可以不用要了。<@greet person=fred/>也意味著使用變數的值fred作為person引數,而不是字串"fred"。當然引數值並不一定是字串型別,也可以是數字,布林值,雜湊表,序列等…也可以在=號左邊使用複雜表示式(比如someparam=(price + 50)*1.25)。

自定義指令可以有多個引數:

<#macro greet person color>

hello $!

當呼叫這個巨集的時候,你僅僅可以使用在macro指令中定義的引數,同時也必須給出在巨集中定義所有引數的值。

給定預設值

很多情況下需要給乙個引數指定乙個相同的值,所以我們僅僅想在這個值發生變化後重新賦給變數。那麼要達到這個目的,在macro指令中必須這麼來指定變數:param_name=usual_value。

例如:

<#macro greet person color="black">

hello $!

根據ftl表示式規則,明白下面這一點是至關重要的,someparam=foo和someparam="$"是不同的。第一種情況,是把變數foo的值作為引數的值來使用。第二種情況則是使用插值形式的字串,那麼引數值就是字串了,這個時候,foo的值呈現為文字,而不管foo是什麼型別(數字,日期等)的。看下面這個例子:someparam=3/4和someparam="$"是不同的,如果指令需要someparam是乙個數字值,那麼就不要用第二種方式。切記不要改變這些。

巢狀內容

自定義指令可以巢狀內容,和預定義指令相似:<#if ...>nested content。比如,下面這個例子中是建立了乙個可以為巢狀的內容畫出邊框:

<#macro border>

<#nested>

<#nested>指令執行位於開始和結束標記指令之間的模板**段。

nested指令也可以多次被呼叫

例如:

<#macro do_thrice>

<#nested>

<#nested>

<#nested>

<@do_thrice>

anything.

巢狀的內容可以是任意有效的ftl,包含其他的使用者自定義指令

例如:

<@border>

在巢狀的內容中,巨集的區域性變數是不可見的

<#macro repeat count>

<#local y = "test">

<#list 1..count as x>

$ $/$: <#nested>

<@repeat count=3>$ $ $

將會列印:

test 3/1: ? ? ?

test 3/2: ? ? ?

test 3/3: ? ? ?

因為y,x和count是巨集的區域性(私有)變數,從巨集外部定義是不可見的

自定義指令

像v if,v show等,是vue已經內建的指令,我們也可以使用directive來自定義指令 其中的blue要被引號所包裹,不然會被識別為變數來進行查詢全域性自定義指令 vue.directive focus vue.directive color var vm new vue 簡寫形式,代表我...

自定義指令

自定義指令有兩種方法 complieprovider.directive 指令名 function return restrict acem replace true,transclude true,template content return restrict acem replace true...

自定義指令

directives.js 存放 自定義標籤 strict require scope link 接收兩個引數 第乙個引數表示自定義指令的名稱 在頁面中使用 分隔單詞,在自定義指令中通過駝峰式命名 第二個引數表示自定義指令處理函式 返回值是乙個物件,用來描述我們自定義指令的 描述自定義指令的物件有一...