【前端】ionic4 侧滑栏ion-item-sliding实现编辑删除效果

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m18633778874/article/details/88085166

目录

前言

侧滑栏效果图   

 一、侧滑栏效果图

二、编辑效果图

侧滑栏ion-item-sliding

一、HTML代码

二、代码结构

三、ts代码---编辑弹框-AlertController

小结


前言

     小编在项目中用到了侧滑栏,单条记录ion-item中实现侧滑栏“编辑、删除功能效果”,具体的实现过程基本上没有什么难点,主要借鉴了前人的经验,项目中有类似的页面,帮助我去实现,然而其中也是遇到了一些难点,如何调整样式ion-row的样式等,通过寻求同事的帮忙,终于对于样式的调整有了一定的认识和了解。

侧滑栏效果图   

 一、侧滑栏效果图

                                                              

二、编辑效果图

                                                               

侧滑栏ion-item-sliding

一、HTML代码

 <ion-list lines="none" inset="true" class="Single-list" style=" border-radius:8px;">
                <ion-item-sliding *ngFor="let itemclass of brainclasslist" #slide>
                    <ion-item style="padding-bottom:5%;height:100%;">
                  <!-- 使用ion-row行括住一条记录 -->
                        <ion-row style="width: 100%">
                  <!--第一列 其中包含两列ion-col 每列的宽度为6-->
                            <ion-col size="6" style="top:5%;" (click)="gotobrainlist(itemclass)">
                                <ion-row>
                
                                    <ion-icon style="font-size: 24px;color:#99CC33;" name="contacts"></ion-icon>
                                    <ion-label>{{itemclass.theme}}</ion-label>
                                </ion-row>
                                <ion-row style="margin-top: 10%; padding-left: 14%">
                                    <div>{{itemclass.creator}}</div>
                                </ion-row>
                            </ion-col>
                   <!-- 第二列  其中包含两列ion-col 每列的宽度为6-->
                            <ion-col size="6">
                                <ion-row style="padding-left: 45%;">
                                    <span>{{itemclass.classNumber}}</span>
                                </ion-row>
                                <ion-row style="padding-left: 35%;" *ngIf="itemclass.isEnd==0">
                                    <span>
                                        <ion-button style="padding-top:11%; font-size: 14px" shape="round" (click)='endClass(itemclass)'>结束班课</ion-button>
                                    </span>
                                </ion-row>
                                <ion-row style="padding-left: 35%;" *ngIf="itemclass.isEnd==1">
                                    <span style="padding-top:5%;font-size: 14px;margin-top: 10px;margin-left: 20px;">已结束</span>
                                </ion-row>                                
                            </ion-col>
                        </ion-row>
                    </ion-item>
                    <!-- 侧滑栏的按钮 -->
                    <ion-item-options side="end" >
                        <ion-button *ngIf="itemclass.isEnd==1" color='danger' expand="full" style="width:15%;height:90%" (click)='deleteMyClass(itemclass,slide)'>删除</ion-button>
                        <ion-button *ngIf="itemclass.isEnd==0" color='primary' expand="full" style="width:15%;height:90%" (click)='editMyClass(itemclass,slide)'>编辑</ion-button>
                    </ion-item-options>
                </ion-item-sliding>
            </ion-list>

二、代码结构

1.一层结构 <ion-list></ion-list>

  只需设计一下样式,class定义,style编写;

 <ion-list lines="none" inset="true" class="Single-list" style=" border-radius:8px;">
 ...
 </ion-list>

2.二层结构<ion-item-sliding></ion-item-sliding>

 标签中包含:  循环语句*ngFor 与 #slide 

 <ion-item-sliding *ngFor="let itemclass of brainclasslist" #slide>
 ...
 </ion-item-sliding>

3.三层结构 <ion-item></ion-item>和<ion-item-options></ion-item-options>

 <ion-item>标签体中包含了<ion-row> <ion-col> 标签,主要是为规划布局,使用这两个标签,更加容易实现排版效果,同时使用这两个标签,不能够自定义调整width的属性,只能通过设计<ion-col>的个数以及size属性实现,保证布局样式的平衡性。

<ion-item-options>标签中包含了侧滑显示的按钮: 

<ion-item-options side="end" >
    <ion-button *ngIf="itemclass.isEnd==1" color='danger' expand="full" 
style="width:15%;height:90%" (click)='deleteMyClass(itemclass,slide)'>删除</ion-button>
    <ion-button *ngIf="itemclass.isEnd==0" color='primary' expand="full" 
style="width:15%;height:90%" (click)='editMyClass(itemclass,slide)'>编辑</ion-button>
</ion-item-options>

三、ts代码---编辑弹框-AlertController

1.html页面点击编辑按钮,获取itemclass对象数据,传到editMyClass方法中,并激发方法: this.presentAlertPrompt()

  /**
     * 编辑我创建的班课
     * @param itemclass 
     * @param node
     * @author 冯浩月
     * @since 2019年3月2日11:42:14
     */
    editMyClass(itemclass: any, node: any) {
        node.close();
        this.itemclass = itemclass; // 获取班课id
        this.presentAlertPrompt();
    }
    /**
     * 获取数据,编辑班课名称
     * @param className 
     * @author 冯浩月
     * @since 2019年3月2日21:31:51
     */
    editOk(className: any) {
        const url = "brainstorming-web/class/modify";
        this.itemclass.theme = className;
        const body = JSON.stringify(this.itemclass);
        this.http.put(url, body).subscribe(
            res => {
                if (res.json().id !== undefined && res.json().id !== null) {
                    super.showToast(this.toastCtrl, '修改班课成功');
                    this.getClassMessage();
                } else {
                    super.showToast(this.toastCtrl, '修改班课失败');
                }

            }
        );

    }

2. this.presentAlertPrompt() 此方法,调用方法editOk,实现前后端交互,修改名称。 

  /**
     * 编辑班课名称弹出框
     * @author 冯浩月
     * @since 2019年3月3日08:18:10
     */
    async presentAlertPrompt() {
        const alert = await this.alertController.create({
            header: '编辑班课名称',
            inputs: [
                {
                    name: 'className',
                    type: 'text',
                    placeholder: '班课名称',
                    value:this.itemclass.theme
                }
            ],
            buttons: [
                {
                    text: '取消',
                    role: 'cancel',
                    cssClass: 'secondary',
                    handler: () => {
                        return;
                    }
                }, {
                    text: '确定',
                    handler: data => {
                        if (data.className.trim() === '') {
                            super.showToast(this.toastCtrl, '请输入班课名称');
                            this.presentAlertPrompt();
                        } else {
                            this.editOk(data.className);
                        }
                    }
                }
            ]
        });

        await alert.present();
    }

小结

     实现这样一个功能,除了借鉴同事已经实现的效果,同时按照自己的想法加上了一些不一样的效果,就是编辑弹窗,AlertController的使用,借鉴了ionic官网,并成功实现了效果。在这个功能实现过程中,自己对于ion-row标签有了一定的认识和了解,同时也感谢同事的帮忙,调整ion-col样式。

                                                                     感谢您的访问!

猜你喜欢

转载自blog.csdn.net/m18633778874/article/details/88085166