当前位置:   article > 正文

HarmonyOS应用开发:鸿蒙自定义组件slot插槽,体现的更强大!_鸿蒙怎么引用自定义布局

鸿蒙怎么引用自定义布局

鸿蒙除了了基础组件,容器组件,高级组件,还有自定义组件,自定义组件可以将已有的组件组合,封装成新的组件,在工程中被多次调用,从而提高代码的可读性。

slot插槽的使用可以让自定义组件承载父组件中定义的内容,使用slot标签可以更加灵活的控制自定义组件的内容元素。

场景:

 子组件中定义 具名插槽 ,通过对插槽命名的方式进行区分,当填充插槽内容时,通过声明插槽名称,将父组件中定义的内容加到对应的插槽中。

实现一个登录效果和list列表展示(后面做应用首页,实现一个完整项目)。

下面我们开始今天的文章,还是老规矩,通过如下几点来说:

1,实现思路

2,代码解析

3,实现效果

3,总结


一,实现思路
添加一个子组件定义两个具名插槽 slot 用来承载父组件中的定义内容,插槽1中实现一个简单登录界面,插槽2中实现一个列表展示。

二,代码解析


子组件:

1,hml文件
添加两个具名插槽 content和content2,用于承载父组件的内容

  1. <div id="drawer-container" class="drawer-container" on:touchstart="onTouchStart"
  2. on:touchmove="onTouchMove" on:touchend="onTouchEnd">
  3. <div class="drawer-content" >
  4. <!--插槽-->
  5. <slot name="content"></slot>
  6. </div>
  7. <stack class="drawer-content2">
  8. <!--插槽-->
  9. <slot name="content2"></slot>
  10. </stack>
  11. </div>


2,css文件

  1. .drawer-container {
  2. width: 100%;
  3. height: 100%;
  4. flex-direction: column;
  5. }
  6. .drawer-content {
  7. width: 100%;
  8. height: 100%;
  9. background-color: white;
  10. }
  11. .drawer-content2 {
  12. width: 100%;
  13. height: 100%;
  14. }

父组件

1,hml文件

  1. <!--引入自定义组件-->
  2. <element name='drawer' src='../sideslipcontent/sideslipcontent.hml'></element>
  3. <div class="container">
  4. <!--通过传值设置样式-->
  5. <drawer>
  6. <!--根据名称加入对应的插槽中-->
  7. <div slot='content' class="content-layout">
  8. <text>登录</text>
  9. <input class="input" type="text" placeholder="请输入账号..."></input>
  10. <input class="input" type="password" placeholder="请输入密码..."></input>
  11. <button class="button" onclick="butClick">登录</button>
  12. </div>
  13. <div slot='content2' class="menu-layout">
  14. <div class="my-info">
  15. <text>个人中心</text>
  16. </div>
  17. <div>
  18. <list scrollbar="on">
  19. <list-item for="{{listData}}" class="list-container"
  20. onclick="listClock({{$item.name}})">
  21. <text>{{$item.name}}</text>
  22. </list-item>
  23. </list>
  24. </div>
  25. </div>
  26. </drawer>
  27. </div>

2,css文件

  1. .container {
  2. width: 100%;
  3. height: 100%;
  4. }
  5. .content-layout {
  6. flex-direction: column;
  7. width: 100%;
  8. justify-content: flex-start;
  9. align-items: center;
  10. }
  11. .content-layout text {
  12. width: 100%;
  13. text-align: center;
  14. font-size: 20px;
  15. padding: 10px;
  16. font-weight: bold;
  17. background-color: darkgray;
  18. }
  19. .input{
  20. margin: 10px;
  21. }
  22. .button{
  23. width: 150px;
  24. padding: 10px;
  25. margin-top: 20px;
  26. font-size: 20px;
  27. }
  28. .menu-layout {
  29. flex-direction: column;
  30. width: 100%;
  31. height: 100%;
  32. background-color: #ffffff;
  33. border-right: 1px solid #eeeded;
  34. }
  35. .my-info {
  36. flex-direction: column;
  37. width: 100%;
  38. height: 70px;
  39. justify-content: center;
  40. align-items: center;
  41. border-bottom: 1px solid #fd3f3f;
  42. background-color: chocolate;
  43. }
  44. .my-info text {
  45. color: #ffffff;
  46. font-size: 20px;
  47. }
  48. .list-container{
  49. padding: 15px;
  50. border-bottom: 1px #000000;
  51. }
  52. .list-container text{
  53. font-size: 20px;
  54. }


3,js文件

  1. import prompt from '@system.prompt';
  2. export default {
  3. data: {
  4. title: 'World',
  5. listData:[
  6. {
  7. 'id': 0,
  8. 'name': '消息',
  9. 'icon': '/common/images/message.png',
  10. },
  11. {
  12. 'id': 1,
  13. 'name': '收藏',
  14. 'icon': '/common/images/collect.png',
  15. },
  16. {
  17. 'id': 2,
  18. 'name': '密码',
  19. 'icon': '/common/images/password.png',
  20. },
  21. {
  22. 'id': 3,
  23. 'name': '反馈',
  24. 'icon': '/common/images/feedback.png',
  25. },
  26. {
  27. 'id': 4,
  28. 'name': '设置',
  29. 'icon': '/common/images/setting.png',
  30. }]
  31. },
  32. listClock(name){
  33. prompt.showToast({
  34. message:name,
  35. duration:3000
  36. })
  37. },
  38. butClick(){
  39. prompt.showToast({
  40. message:"登录成功!",
  41. duration:3000
  42. })
  43. }
  44. }

三,实现效果

四,总结

slot插槽

自定义组件中通过slot标签来承载父组件中定义的内容,使用slot标签可以更加灵活的控制自定义组件的内容元素


具名插槽
当自定义组件中需要使用多个插槽时,可通过对插槽命名的方式进行区分,当填充插槽内容时,通过声明插槽名称,将内容加到对应的插槽中。

生命周期

鸿蒙为自定义组件提供了一系列生命周期回调方法,
包括:onInit,onAttached,onDetached,onLayoutReady,onDestroy,onPageShow和onPageHide。


说明:

onInit  初始化自定义组件   自定义组件初始化生命周期回调,当自定义组件创建时,触发该回调,主要用于自定义组件中必须使用的数据初始化,该回调只会触发一次调用。

onAttached  自定义组件装载    自定义组件被创建后,加入到Page组件树时,触发该回调,该回调触发时,表示组件将被进行显示,该生命周期可用于初始化显示相关数据,通常用于加载图片资源、开始执行动画等场景。

onLayoutReady   自定义组件布局完成  自定义组件插入Page组件树后,将会对自定义组件进行布局计算,调整其内容元素尺寸与位置,当布局计算结束后触发该回调。

onDetached   自定义组件摘除    自定义组件摘除时,触发该回调,常用于停止动画或异步逻辑停止执行的场景。
onDestroy   自定义组件销毁    自定义组件销毁时,触发该回调,常用于资源释放。
onPageShow  自定义组件Page显示    自定义组件所在Page显示后,触发该回调。
onPageHide  自定义组件Page隐藏    自定义组件所在Page隐藏后,触发该回调。

原创不易,有用就关注一下。要是帮到了你 就给个点赞吧,多谢支持。

觉得不错的小伙伴,记得帮我 点个赞和关注哟,笔芯笔芯~**

有问题请留言或者私信,可以 WX搜索公众号:程序员漫话编程

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/240058
推荐阅读
相关标签
  

闽ICP备14008679号