HarmonyOS自定义列表组件封装

描述

   

根据OpenHarmony官网组件,结合相关技术,尝试列表组件的封装,提高开发的效率。

     

 

效果展示:

封装组件  

实现步骤

     

①封装组件代码

 

hml 代码:

    <div class="container {{ start ? 'background' : '' }}">
        
        <div class="underline" >
            
            <div class="list-left">
                <div>
                    <text class="title">{{ title }}text>
                div>
                
                <div class="list-des"
                     if="{{ subheading }}">
                    <text class="list">
                        <span>{{ subheading }}span>
                    text>
                div>
            div>
            
            <div class="list-right">
                <switch class="switch-list"
                        if="{{ whether }}"
                        @change="switchHandle">
                switch>
                
                <image else @click="launch()" class="list-icon" src="../images/right.png">
                image>
            div>
        div>
    div>

 

css 代码:

.container {
    justify-content: center;
    align-items: center;
    padding-left48px;
    padding-right35px;
    overscroll-effect: spring;
}

.background:active {
    background-color#f6f6f6;
}

.underline {
    border-bottom1px solid #ccc;
}

/*标题样式代码*/
.list-left {
    flex1;
    flex-direction: column;
    justify-content: center;
}

.title {
    font-family: FZLTHJW--GB1-0;
    font-size32px;
    colorrgba(0, 0, 0, 0.9);
    letter-spacing0;
    font-weight400;
    height70px;
}

.list-des {
    width530px;
    flex-wrap: wrap;
    margin-bottom10px;
}

.list {
    font-family: HarmonyOS_Sans;
    font-size28px;
    colorrgba(0, 0, 0, 0.6);
    letter-spacing0;
    line-height35px;
    font-weight400;
    padding-bottom2px;
}

/*switch开关样式代码*/
.list-right {
    justify-content: flex-end;
    width115px;
    min-height100px;
    align-items: center;
}

.switch-list {
    width115px;
    height120px;
}

.list-icon {
    width14px;
    height26px;
    right20px;
}

 

js 代码:

export default {
    props: {
        //数据绑定
        title: {
            default''
        },
        //数据绑定
        subheading: {
            default''
        },

        //true是switch开关,false是图标
        whether: {
            defaulttrue,
            type:Boolean
        },

        //判断是不是switch开关列表,不是就加点击阴影事件
        start: {
            defaulttrue,
            type:Boolean
        },

    },

    computed: {
        //判断是不是switch开关列表,不是就加点击阴影事件
        start() {
            return  !this.whether
        },
    },

    /**
     * 切换开关
     */
    switchHandle({checked: checkedValue}) {
        this.$emit('switchHandle', checkedValue);
        this.checkStatus = checkedValue;
    },

};

 

②引入组件代码,实现列表功能  

hml 代码:

    <element name="list-page" src="../../common/listitem/listitem.hml">element>
<div class="container">
      <list-page whether="{{ true }}"
          @switch-handle="showDialog"
          title="标题1"
          subheading="副文本">
    list-page>
    <list-page whether="{{ true }}"
          title="标题2">
    list-page>

    <list-page whether="{{ false }}"
          title="标题3">
    list-page>

    <list-page whether="{{ false }}"
          title="标题4"
          subheading="副文本">
    list-page>

div>
 

css 代码:

.container {
    flex-direction: column;
    color#fff;
    background-color#fff;
    overscroll-effect: spring;
}

 

效果图为:

封装组件③在标题 1 加弹窗  

hml 代码:


    <dialog id="dataRoamDialog" class="dialog-main">
        <div class="dialog-div roaming">
            <text class="text ">什么弹窗text>
            <div class="inner-txt">
                <text class="txt distance">弹窗text>
            div>
            
            <div class="inner-btn">
                <button type="capsule"
                        value="确定"
                        onclick="setList"
                        class="btn-txt">
                button>
                <div class="btn-l">div>
                <button type="capsule"
                        value="取消"
                        onclick="setList"
                        class="btn-txt">
                button>
            div>
        div>
    dialog>

 

css 代码:

/*弹窗样式*/
.dialog-main {
    width95%;
}

.dialog-div {
    flex-direction: column;
    align-items: flex-start;
}

.roaming {
    height340px;
}

.text {
    font-family: HarmonyOS_Sans_Medium;
    font-size36px;
    colorrgba(0, 0, 0, 0.9);
    letter-spacing0;
    line-height38px;
    font-weight: bold;
    height112px;
    padding40px 0 0 40px;
}

.inner-txt {
    width90%;
}

.txt {
    font-family: HarmonyOS_Sans;
    font-size32px;
    colorrgba(0, 0, 0, 0.9);
    letter-spacing0;
    line-height38px;
    font-weight400;
    flex1;
    height75px;
    justify-content: space-between;
    font-family: PingFangSC-Regular;
}

.distance {
    padding-left40px;
    margin-top20px;
}

.inner-btn {
    width100%;
    height120px;
    line-height80px;
    justify-content: center;
    align-items: center;
    margin10px 20px 0 20px;
}

.btn-txt {
    width230px;
    height80px;
    font-size32px;
    text-color#1e90ff;
    background-color#fff;
    text-align: left;
    align-items: center;
    flex1;
    text-align: center;
}

.btn-l {
    width2px;
    height50px;
    background-color#ccc;
    margin0 10px;
}

 

js 代码:

export default {
    /**
     * 标题1弹窗开启
     */
    showDialog() {
            this.$element('dataRoamDialog').show();
    },

    /**
     * 标题1弹窗取消
     */
    setList() {
        this.$element('dataRoamDialog').close();
    },
}

 

效果图:

封装组件  

总结

   

 

以上是所有的代码,写这个不难。主要用到了数据绑定跟三元运算和弹窗组件。相当于学习了OpenHarmony的开发,自己尝试封装,让自己更加了解OpenHarmony开发。欢迎各位开发者一起讨论与研究,本次分享希望对大家的学习有所帮助。

 

审核编辑 :李倩

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分