# 如何为åŒä¸€ç»„件在ä¸åŒåœºæ™¯ä¸‹ç»‘定ä¸åŒçš„业务逻辑 ## åœºæ™¯ä»‹ç» åœ¨åº”ç”¨å¼€å‘过程ä¸ç»å¸¸é‡åˆ°è¿™æ ·çš„场景:在ä¸åŒçš„地方需è¦å‘ˆçŽ°åŒæ ·çš„UI效果,为了简化处ç†ï¼Œå¾€å¾€ä¼šæŠŠå¯¹åº”çš„UIå…ƒç´ å°è£…æˆè‡ªå®šä¹‰ç»„件,然åŽåœ¨ç”¨åˆ°çš„地方进行调用。但是,通常情况下,UI展示往往伴éšç€åЍæ€äº¤äº’,而且在ä¸åŒåœºæ™¯ä¸‹éœ€è¦åšä¸åŒçš„交互处ç†ã€‚ *比如:Aã€B两个页é¢éƒ½æœ‰è¿”回按钮,但是在A页é¢ä¸ç‚¹å‡»è¿”回按钮是返回上一页,在B页é¢ç‚¹å‡»è¿”回按钮是直接退出当å‰åº”ç”¨ã€‚åŒæ ·æ˜¯ç‚¹å‡»è¿”回按钮,但是业务处ç†é€»è¾‘是ä¸åŒçš„。* 那么在ä¸åŒåœºæ™¯ä¸‹è°ƒç”¨åŒä¸€ç»„件的时候如何实现ä¸åŒçš„交互逻辑呢?这就引出了本文è¦è®²çš„内容。 ## 实现æ€è·¯ è¦ä½¿åŒä¸€ç»„件实现ä¸åŒæ•ˆæžœï¼Œæˆ‘们很容易就想到通过å˜é‡ä¼ å‚è¿›è¡ŒæŽ§åˆ¶ï¼Œè€Œä¸æ˜¯ç›´æŽ¥åœ¨ç¨‹åºä¸é‡‡ç”¨å›ºå®šå€¼ï¼Œè¿™æ ·å°±å¯ä»¥æ ¹æ®ä¸åŒåœºæ™¯ä¼ å…¥ä¸åŒå‚数从而实现ä¸åŒæ•ˆæžœã€‚ é€šè¿‡ä¼ å‚çš„æ–¹å¼æ”¹å˜ç»„件的属性,比如:大å°ã€è¾¹æ¡†ã€èƒŒæ™¯è‰²ã€å—体ç‰ç‰ï¼ŒåŒæ ·çš„,也å¯ä»¥é€šè¿‡ä¼ å‚çš„æ–¹å¼æ”¹å˜ç»„件绑定的业务逻辑,åªä¸è¿‡æ¤æ—¶ä¼ å…¥çš„æ˜¯å«æœ‰ä¸šåŠ¡é€»è¾‘çš„æ–¹æ³•ã€‚ æŽ¥ä¸‹æ¥æˆ‘们用一个简å•的例å讲解如何实现。 ## å¼€å‘示例 本示例将在一个页é¢ä¸ä¸¤æ¬¡å¼•用åŒä¸€ä¸ªæŒ‰é’®ï¼Œç„¶åŽä¸ºä¸¤æ¬¡å¼•ç”¨åŠ å…¥ä¸åŒçš„处ç†é€»è¾‘,第一次引用ä¸ï¼Œç‚¹å‡»æŒ‰é’®è·³è½¬åˆ°â€œHello World!â€é¡µé¢ï¼›ç¬¬äºŒæ¬¡å¼•用ä¸ï¼Œç‚¹å‡»æŒ‰é’®è·³è½¬åˆ°â€œHello ArkTS!â€é¡µé¢ã€‚ ### çŽ¯å¢ƒè¦æ±‚ - IDE:DevEco Studio 3.1 Beta1 - SDK:Ohos_sdk_public 3.2.11.9 (API Version 9 Release) ### 开呿¥éª¤ 1. 创建按钮组件 首先,创建被引用的按钮组件。 è¿™é‡Œéœ€è¦æ³¨æ„的是,由于按钮è¦ç»‘定ä¸åŒçš„处ç†é€»è¾‘,所以我们在点击事件ä¸ä¸è¦å†™å…¥å›ºå®šçš„处ç†é€»è¾‘ï¼Œè€Œæ˜¯ä¼ å…¥ä¸€ä¸ªè‡ªå®šä¹‰çš„ç©ºæ–¹æ³•ï¼Œè¯¥æ–¹æ³•çš„é€»è¾‘åœ¨çˆ¶ç»„ä»¶ä¸å®žçŽ°ï¼Œç„¶åŽä¼ 入。具体代ç 如下: ```ts @Component struct ChildComponent{ @State button_text:string = 'hi' // 定义一个空函数 child_func:()=>void build(){ Button(`${this.button_text}`) .height(100) .width(200) .onClick(() => { // 在组件的点击事件ä¸ç»‘定之å‰å®šä¹‰çš„空函数 this.child_func() }) } } ``` 2. 在父组件ä¸å¼•用按钮组件 接下æ¥ï¼Œæˆ‘们在父组件ä¸å¼•用两次第1æ¥ä¸åˆ›å»ºçš„æŒ‰é’®ç»„件。具体代ç 如下: ```ts @Entry @Component struct FuncTransition{ build() { Column(){ // 引用按钮组件 ChildComponent({button_text:'Hello World'}) .margin(50) ChildComponent({button_text:'Hello ArkTS'}) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center) } } ``` 3. 在父组件ä¸ä¼ 入处ç†é€»è¾‘ 以上两æ¥å·²ç»æŠŠé¡µé¢æ¡†æž¶æå¥½äº†ï¼ŒæŽ¥ä¸‹æ¥ç»™æŒ‰é’®ç»„ä»¶ä¼ å…¥å¤„ç†é€»è¾‘,这也是最é‡è¦çš„一æ¥ã€‚ 在第1æ¥ä¸ä¸ºæŒ‰é’®ç»„件的点击事件绑定了一个空函数,现在我们在父组件ä¸åˆ›å»ºä¸€ä¸ªå¸¦æœ‰å…·ä½“处ç†é€»è¾‘çš„å‡½æ•°ï¼Œå¹¶å°†å…¶ä¼ å…¥æŒ‰é’®ç»„ä»¶ä¸ã€‚在父组件ä¸å¯ä»¥é€šè¿‡ä¸ºåŒä¸€å‡½æ•°ä¼ å…¥ä¸åŒå‚æ•°æ¥ä¸ºä¸¤ä¸ªæŒ‰é’®ç»„件绑定ä¸åŒé€»è¾‘,也å¯ä»¥é€šè¿‡ä¸åŒå‡½æ•°æ¥å®žçŽ°ï¼Œæœ¬ä¾‹ä¸é‡‡ç”¨å‰è€…进行实现。具体代ç 如下: ```ts import router from '@ohos.router' @Entry @Component struct FuncTransition{ // 在父组件ä¸åˆ›å»ºé€»è¾‘处ç†å‡½æ•°ï¼Œæ¤å¤„逻辑为页é¢è·³è½¬ã€‚ parent_func(page_url){ router.pushUrl({ url:page_url }) } build() { Column(){ // 在第1处引用的å组件ä¸ä¼ 入父组件ä¸å®šä¹‰çš„函数,æ¤å¤„为跳转到''Hello World!''é¡µé¢ ChildComponent({child_func:()=>{this.parent_func('pages/HelloWorld')},button_text:'Hello World'}) .margin(50) // 在第2处引用的å组件ä¸ä¼ 入父组件ä¸å®šä¹‰çš„函数,æ¤å¤„为跳转到''Hello ArkTS!''é¡µé¢ ChildComponent({child_func:()=>{this.parent_func('pages/HelloArkTS')},button_text:'Hello ArkTS'}) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center) } } ``` 通过以上æ¥éª¤æˆ‘们实现了在为åŒä¸€æŒ‰é’®ç»„件绑定ä¸åŒçš„业务处ç†é€»è¾‘,接下æ¥çœ‹ä¸‹æ•ˆæžœå§ï¼ 注æ„:文ä¸çš„“Hello World!â€é¡µé¢å’Œâ€œHello ArkTS!â€é¡µé¢ä¸æ˜¯æœ¬æ–‡è¯´æ˜Žçš„é‡ç‚¹ï¼Œæ‰€ä»¥æœ¬æ–‡ä¸ä¸åšå¼€å‘介ç»ã€‚  ## 完整代ç 示例完整代ç 如下: ```ts import router from '@ohos.router' @Entry @Component struct FuncTransition{ parent_func(page_url){ router.pushUrl({ url:page_url }) } build() { Column(){ ChildComponent({child_func:()=>{this.parent_func('pages/HelloWorld')},button_text:'Hello World'}) .margin(50) ChildComponent({child_func:()=>{this.parent_func('pages/HelloArkTS')},button_text:'Hello ArkTS'}) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center) } } @Component struct ChildComponent{ @State button_text:string = 'hi' child_func:()=>void build(){ Button(`${this.button_text}`) .height(100) .width(200) .onClick(() => { this.child_func() }) } } ```