移动端单模块功能实现思路及重要方法总结

简介: 移动端单模块功能实现思路及重要方法总结

20210609234312234.jpg

1 更多操作思路分析:


总体认知:搭结构,先做基本的页面样式,再做功能。能封装就封装,复杂功能拆分成一个个分支组件

2 我要实现的效果


对于已经登陆的用户,点击小×可允许他们去关闭某篇文章,或者是反馈内容;对于没有登录的用户小×不会显示

3 大体规划


第一步,搭建UI页面。只有登录的用户才能看见小×,未登录是没有的

第二步,使用弹层组件,使同一时间只有一个子内容显示,另一个隐藏

第三步,点击‘不感兴趣’,要做三件事分别是 1调接口,关闭弹层,删除文章(数组中)

第四步,点击‘举报内容’,同样是做三件事

4 具体实现使用到的知识点


4.1,需要判断用户有没有token,有token就显示小x号可对其操作,没token那只能干看了。在组件中判断有没有token的话,if(this.$store.state.XXX)--毕竟token是保存在vuex的state中的,注意:如果是在template中的话不要加this。因为vue底层已经做了


4.2,弹层组件popup组件+v-model +利用v-if-else实现状态切换--这个看官网的使用方法,vant(有赞)


4.3,点击小x控制弹出框的显示隐藏(点击事件可以把简单代码写在注册行,如:@click='xx变量名=false' 以及v-if = ‘布尔值’,如:v-if="!isReport"),以及获取文章的id,后面根据他删除,id是上面v-for的属性,也就是说,你要点击这个删除某个文章,肯定需要获取文章的id之类的,万变不离其宗。


4.4 弹出框用的是vant里的popup弹出层


4.5 弹出框里面的内容,选择新建一个.vue文件搭建结构(就问你能不能在当前页面写?——能!),目的是结构清晰,方便维护。 利用vant里面的cell单元格,先将所有的内容放进去,只需要控制每次只有一个显示就行。


4.6

    这个状态1 ,2 其实就是刚搭好页面结构,就是需要隐藏的和显示的都在一起,算了,加一段代码。如打印的话,会清楚看到页面结构,理解我说的。


4.7 使用v-if  else控制元素的现实和隐藏,可以做一些判断

// 此文件负责弹出层内容显示,使用vant里面的cell单元格
<template>
  <div class="more-action">
    <!-- 状态一 -->
    <van-cell-group v-if="!isReport">
      <van-cell @click="buxihuan">不感兴趣</van-cell>
      <van-cell is-link @click="isReport = true">反馈垃圾内容</van-cell>
      <!-- 定义一个布尔变量,当我点反馈的时候,状态1隐藏,状态2 显示那么他的所在的状态一的值应该是 false-->
      <!-- 首先,状态1应该是点击x后默认显示的,此时初始状态是 ,1显示,2隐藏,当我点击反馈的时候,此时他隐藏,2显示 -->
      <van-cell>拉黑作者</van-cell>
    </van-cell-group>
    <!-- 状态二 反馈-->
    <van-cell-group v-else>
      <van-cell icon="arrow-left" @click="isReport = false">返回</van-cell>
      <van-cell
        v-for="item in reports"
        :key="item.value"
        @click="hReport(item.value)"
        >{{ item.label }}</van-cell
      >
    </van-cell-group>
  </div>
</template>

5.继续上面的知识点


5.1 点击不感兴趣要做三件事,调接口+关弹窗+删数据


上面新建了,子组件,一般子传父都是传些数据,然而:


子传父-骚操作--子传父不带数据,就告诉你,爹你来!

他爹通过子自定义的事件名接受,同时使用自己的回调函数,处理。


5.2 调接口--毫无难度-先去建个.js文件封装,接着导入-使用-固定步骤固定格式-熟能生巧尔


5.3删除文章-删除数组中的(不可能因为你不喜欢这个文章,后台把数据库内容给删除了),利用findindex找下标,利用splice删除数组该下标。里面有一个点比较关键,下标哪里来?点击小x的时候,就可以获取得到,然后定义state里定义变量接受,之后传给函数,Soeasy。(findindex 是js封装的api,我会在另一个文章中集中总结)

6重要知识点


1.【封装数据】把数据封装到单独的文件中,封装成对象。然后渲染的时候通过引入(注意,引入的时候需要先定义,例如这种需要在data中引入,如函数需要在methods中),再使用v-for。可以提高可维护性。试想,如果你写在data或者state中,固定的的写死,但凡需求以便,或是改动数据非常不便,理解封装的思想很重要

/ 以模块的方式导出 举报文章 时,后端接口约定的举报类型
// 这是常量数组
// 搞这个的目的是后期可以提高可维护性,改动简单,属于弊在当下功在千秋
const reports = [
  {
    value: 0,
    label: '其它问题'
  },
  {
    value: 1,
    label: '标题夸张'
  },{
     ……
     }
——————————————————下面是不封装的对比——————————————————————
 <van-cell icon="arrow-left">返回</van-cell>
      <van-cell>侵权</van-cell>
      <van-cell>色情</van-cell>
      <van-cell>暴力</van-cell>
      ……
    </van-cell-group>

6.2 消除魔法字符串


消除魔法字符串,听着很酷炫,其实很简单。不过他很优雅,也确实很帅。

let  a = 100;
//这是普通写法
console.log(100 + 1) 
console.log(100 + 2)
console.log(100 + 3)
console.log(100 + 4)
……
//高级写法:
console.log(a + 1) 
console.log(a + 2)
console.log(a + 3)
console.log(a + 4)
看见没,如果这是一个一直输出,100+上某个数,我可以将a 提出来,这样将来变成99+某个数,我只需要改一个值就行了

6.3 父组件修改子组件


1 给子组件添加引用。它子组件补充一个 ref 例如  <子组件名字  ref="XXXX">


2 通过this.$refs.子组件引用.子组件数据=新值。this.$refs.XXXX.aaaa= 值


注意:一定要确保这个子组件已经被创建出来了


父组件可以想怎么修改子组件就怎么修改子组件

0今日重点


token持久化


背景:在我点击登录进去首页的时候,后台token确实发来了,但是保存在内存中,一刷新就没了,而要干一些事,没token还得重新登录,非常不合适。于是借助本地存储+vuex


知识回顾:vuex保存数据的特点:保存在内存中(页面一刷新就没了),响应式,全局公共的,任何组件都可以使用;本地存储特点:保存在本地浏览器,存储大小有几个m,非响应式,但保存时间长,刷新页面数据还在。


我在初始做这个项目的时候,就感觉出来了,页面一刷新,我就得重新登录获取token,然后我想用本地存储,结果只在请求中写了保存,却没有把token取出来给state,结果肯定是不行 。

使用方法:


首先,token是后台给我们发的,发来的是对象,键值对的形式,此时打印的话,可以看到,token的值是字符串。我们存的时候需要转换成字符串,取出来的时候,需要转化成对象,好操作token。

1 .localStorage.setItem("键", JSON.stringify(值))     // 保存
2. JSON.parse(localStorage.getItem(值))  //获取
3. localStorage.removeItem(‘键’)  //删除

还可以将他们封装起来,到时候随便调用。

相关文章
|
开发者 物联网 物联网安全
透视盒马:新零售操作系统的秘密
盒马是一个端到端,线上线下一体化的零售业务。在阿里CIO学院攻“疫”技术公益大咖说的第十六场直播中,盒马技术负责人何崚详细介绍了盒马产品技术在构建供给网络、销售网络、物流网络这三个核心命题时遇到的挑战和技术难点。
4678 2
|
存储 边缘计算 安全
未来云计算发展趋势与挑战
随着数字化时代的推进,云计算作为关键基础设施之一,扮演着越来越重要的角色。本文将探讨未来云计算的发展趋势以及面临的挑战,从技术创新、安全性、可持续性等多个角度进行分析,旨在为读者提供对未来云计算发展方向的深入思考。
|
消息中间件 Linux 网络安全
之所以能早点下班,多亏看有了这篇 Ansible 工作原理图解!
之所以能早点下班,多亏看有了这篇 Ansible 工作原理图解!
174 0
|
监控 Oracle 关系型数据库
Oracle数据库性能优化
【10月更文挑战第16天】Oracle数据库性能优化是
309 1
|
存储 算法 NoSQL
【C/C++ 数据结构】稀疏矩阵解析:从原理到 C++ 实现 指南
【C/C++ 数据结构】稀疏矩阵解析:从原理到 C++ 实现 指南
698 0
|
存储 消息中间件 监控
死信队列(Dead Letter Queues)
死信队列(Dead Letter Queues)
|
机器学习/深度学习 算法 大数据
[ICLR 2024] 基于Pathways架构的自适应多尺度时间序列预测模型Pathformer
阿里云计算平台大数据基础工程技术团队主导,与华东师范大学数据科学与工程学院合作的论文《Pathformer: Multi-Scale Transformers With Adaptive Pathways For Time Series Forecasting》被ICLR 2024接收,该论文提出了基于Pathways架构的自适应多尺度时间序列预测模型Pathformer,它从时间分辨率和时间距离角度进行多尺度时序建模,同时进一步提出自适应Pathways来动态调整多尺度建模过程,基于两者,Pathformer在阿里云数据集和公开数据集上取得SOTA预测效果,并展现出不错的泛化性和迁移性。
|
传感器 机器学习/深度学习 人工智能
史上最全综述 | 3D目标检测算法汇总!(单目/双目/LiDAR/多模态/时序/半弱自监督)(下)
近年来,自动驾驶因其减轻驾驶员负担、提高行车安全的潜力而受到越来越多的关注。在现代自动驾驶系统中,感知系统是不可或缺的组成部分,旨在准确估计周围环境的状态,并为预测和规划提供可靠的观察结果。3D目标检测可以智能地预测自动驾驶车辆附近关键3D目标的位置、大小和类别,是感知系统的重要组成部分。本文回顾了应用于自动驾驶领域的3D目标检测的进展。
史上最全综述 | 3D目标检测算法汇总!(单目/双目/LiDAR/多模态/时序/半弱自监督)(下)
|
Java
Java栈(Stack)深度解析与实现
Java栈(Stack)深度解析与实现
503 1
|
Java Maven
解决Maven依赖全部失败
解决Maven依赖全部失败
301 0