自定義構建函數2

1开镣、自定義構建函數

1.1、構建函數- @BuilderParam 傳遞UI

● Component可以抽提組件
● Builder可以實現輕量級的UI復用
● BuilderParam只能應用在Component組件中沿盅,不能使用Entry修飾的組件中使用。類似vue里面的slot插槽
語法: @BuilderParam name: () => void

聲明一個Card組件

@Component
struct Card {
  @BuilderParam // 代表插槽的參數
  content: () => void = () => {}
  build() {
    Column() {
      if (this.content) {
        this.content()  // 渲染傳入的內容
      }

父組件調用傳入

@Entry
@Component
struct BuilderParamCase {
  @Builder   // 定義插槽
  getContent () {
    Row() {
      Text("插槽內容")
        .fontColor(Color.Red)
    }
  }
  build() {
    Row() {
      Column() {
        // 需要注意的是,傳入的函數必須是使用Builder修飾符修飾的
        Card({ content: this.getContent }) // 調用子組件疾渣,并把插槽作為參數傳入
      }
      .width('100%')
    }
    .height('100%')
  }
}

BuilderParams類似于 Vue中的插槽

    1. 子組件中定義一個用BuilderParam修飾的函數
    1. 父組件需要給子組件傳入一個用Builder修飾的函數來賦值給子組件
    1. 子組件要在想要顯示插槽的地方來調用傳入的方法

1.1.1拴魄、尾隨閉包

??當我們的組件只有一個BuilderParam的時候冗茸,此時可以使用尾隨閉包的語法 也就是像我們原來使用Column或者Row組件時一樣,直接在大括號中傳入匹中, 如下

  Card() {
          Text('1')
          this.renderButton()
        }

??如果有多個BuilderParam夏漱,你必須在組件的函數中老老實實的傳入多個builder自定義函數

@Component
struct  Card {
  @BuilderParam
  content: () => void    // 傳入多個builder自定義函數
  @BuilderParam
  header: () => void   // 傳入多個builder自定義函數
  build() {
    Column () {
      if(this.header) {
        this.header()
      }
      if(this.content) {
        this.content()
      }
    }
  }
}
@Entry
@Component
struct BuilderParamCase {
  @Builder
  getContent () {
    Row() {
      Text("插槽內容")
        .fontColor(Color.Red)
    }
  }
  @Builder
  getHeader () {
    Row() {
      Text("頭部內容")
        .fontColor(Color.Red)
    }
  }
  build() {
    Row() {
      Column() {
         Card({
          header: () => {   // 傳入多個builder自定義函數
            this.getHeader()
          },
          content: () => {   // 傳入多個builder自定義函數
            this.getContent()
          }
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

案例- 封裝Card 和CardItem組件, 使用BuilderParam屬性完成插槽傳參

@Entry
@Component
struct BuildParamCard {
  @State message: string = 'Hello World'
  @Builder
  getCardItem() {
    CardItem({leftTitle:'員工姓名', rightTitle:'張三'})
    CardItem({leftTitle:'員工上級', rightTitle:'李四', showBottomBorder:false})
  }
  build() {
    Row() {
      Column() {
        Card2({CardFn:this.getCardItem})
      }
      .width('100%')
    }
    .height('100%')
    .backgroundColor(Color.Gray)
  }
}

@Component
struct Card2 {
  @BuilderParam
  CardFn: () => void = () => {}
  build() {
    Column() {
      Column() {
        // 傳插槽內容
        this.CardFn()
      }
      .backgroundColor(Color.White)
      .width('100%')
      .borderRadius(8)
    }.margin({
      top:10
    })
    .padding({
      left:15,
      right:15
    })
  }
}

@Component
struct CardItem {
  leftTitle:string = ""
  rightTitle:string = ""
  showBottomBorder:boolean = true
  build() {
    Row() {
      Text(this.leftTitle)
      Text(this.rightTitle).fontColor("#ccc")

    }
    .width('100%')
    .justifyContent(FlexAlign.SpaceBetween)
    .padding({
      left:10,
      right:10
    })
    .height(50)
    .border({
      color:'#f4f5f6',
      width:{
        bottom:this.showBottomBorder ? 1 :0  //下劃線
      }
    })
  }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末顶捷,一起剝皮案震驚了整個濱河市挂绰,隨后出現的幾起案子,更是在濱河造成了極大的恐慌服赎,老刑警劉巖葵蒂,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異重虑,居然都是意外死亡践付,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門缺厉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來永高,“玉大人隧土,你說我怎么就攤上這事》α海” “怎么了次洼?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長遇骑。 經常有香客問我卖毁,道長,這世上最難降的妖魔是什么落萎? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任亥啦,我火速辦了婚禮,結果婚禮上练链,老公的妹妹穿的比我還像新娘翔脱。我一直安慰自己,他們只是感情好媒鼓,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布届吁。 她就那樣靜靜地躺著,像睡著了一般绿鸣。 火紅的嫁衣襯著肌膚如雪疚沐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天潮模,我揣著相機與錄音亮蛔,去河邊找鬼。 笑死擎厢,一個胖子當著我的面吹牛究流,可吹牛的內容都是我干的。 我是一名探鬼主播动遭,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼芬探,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了厘惦?” 一聲冷哼從身側響起偷仿,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绵估,沒想到半個月后炎疆,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡国裳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年形入,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缝左。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡亿遂,死狀恐怖浓若,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情蛇数,我是刑警寧澤挪钓,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站耳舅,受9級特大地震影響碌上,放射性物質發(fā)生泄漏。R本人自食惡果不足惜浦徊,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一馏予、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盔性,春花似錦霞丧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至悉尾,卻和暖如春突那,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背焕襟。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工陨收, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饭豹,地道東北人鸵赖。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像拄衰,于是被迫代替她去往敵國和親它褪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內容