119.【Uniapp】(二十二)

简介: 119.【Uniapp】

11.配置页面 - 结算区域

(1).把结算区域封装为组件
  1. components 目录中,新建 my-settle 结算组件:
  2. 初始化 my-settle 组件的基本结构和样式:
<template>
  <view class="my-settle-container">
    <h1>结算</h1>
  </view>
</template>
<script>
  export default {
    name: "my-settle",
    data() {
      return {
      };
    }
  }
</script>
<style lang="scss">
  .my-settle-container {
    position: fixed;
    bottom: 0;
    width: 100%;
    height: 50px;
    background-color: rebeccapurple;
  }
</style>
  1. 在 cart.vue 页面中使用自定义的 my-settle 组件,并美化页面样式,防止页面底部被覆盖
<template>
  <view class="cart-container">
    <!-- 使用自定义的 address 组件 -->
    <!-- 购物车商品列表的标题区域 -->
    <!-- 商品列表区域 -->
    <!-- 结算区域 -->
    <my-settle></my-settle>
  </view>
</template>
<style lang="scss">
.cart-container {
  padding-bottom: 50px;
}
</style>

(2).渲染结算区域的结构和样式
  1. 定义如下的 UI 结构:
<template>
  <view class="my-settle-container">
    <!-- 全选 -->
    <label class="radio">
      <radio color="#C00000" checked="true" /><text>全选</text>
    </label>
    <!-- 合计 -->
    <view class="amount-box">
      合计: <text class="amount">¥123.00</text>
    </view>
    <!-- 结算按钮 -->
    <view class="btn-settle">
      结算(0)
    </view>
  </view>
</template>
  1. 美化样式:
<style lang="scss">
  .my-settle-container {
    position: fixed;
    bottom: 0;
    width: 100%;
    height: 50px;
    background-color: white;
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 14px;
    padding-left: 5px;
    // 全选
    .radio {
      display: flex;
      align-items: center;
    }
    // 合计
    .amount-box {
      // 金钱
      .amount {
        color: #C00000;
        font-weight: bold;
      }
    }
    // 结算
    .btn-settle {
      // 盒子高度
      height: 50px;
      // 行高
      line-height: 50px;
      background-color: #C00000;
      align-items: center;
      padding: 0 10px;
      min-width: 100px;
      text-align: center;
    }
  }
</style>

(3). 动态渲染已勾选商品的总数量
  1. 在 store/cart.js 模块中,定义一个名称为 checkedCount 的 getters,用来统计已勾选商品的总数量:
// 勾选的商品的个数
    checkedCount(state) {
      // 首先获取所有已勾选的项组成一个数组
      // 然后利用数组的reduce((回调函数的返回值也就是return返回的,循环的item项)=>{},0)方法 : 第一个参数是回调函数,第二个参数是初始值
      // 这里total初始化为0
      return state.cart.filter(x => x.goods_state === true).reduce((total, item) => {
        return total += item.goods_count
      }, 0)
    }
  1. 在 my-settle 组件中,通过 mapGetters 辅助函数,将需要的 getters 映射到当前组件中使用:
import { mapGetters } from 'vuex'
export default {
  computed: {
    ...mapGetters('m_cart', ['checkedCount']),
  },
  data() {
    return {}
  },
}
  1. 将 checkedCount 的值渲染到页面中:
<!-- 结算按钮 -->
<view class="btn-settle">结算({{checkedCount}})</view>

(5).动态渲染全选按钮的选中状态

1 .使用 mapGetters 辅助函数,将商品的总数量映射到当前组件中使用,并定义一个叫做 isFullCheck 的计算属性:

import { mapGetters } from 'vuex'
export default {
  computed: {
    // 1. 将 total 映射到当前组件中
    ...mapGetters('m_cart', ['checkedCount', 'total']),
    // 2. 是否全选
    isFullCheck() {
      return this.total === this.checkedCount
    },
  },
  data() {
    return {}
  },
}
  1. 为 radio 组件动态绑定 checked 属性的值:
<!-- 全选区域 -->
<label class="radio">
  <radio color="#C00000" :checked="isFullCheck" /><text>全选</text>
</label>


相关文章
|
开发者
|
小程序 iOS开发
|
存储 JavaScript Java
|
存储 JavaScript
|
6月前
|
前端开发 JavaScript Android开发
【Uniapp 专栏】分析 Uniapp 与其他前端框架的异同
【5月更文挑战第16天】Uniapp是一个基于Vue.js的跨平台前端框架,能将代码编译成iOS、Android、H5等多个平台应用,简化跨平台开发。相比React和Angular,Uniapp更适合移动应用,减少平台适配工作。Vue.js的组件化和灵活性在Uniapp中得到延伸,增加了移动端特性。而Flutter性能优越,但学习成本高。开发者应根据项目需求和技术栈选择合适的框架。
177 4
【Uniapp 专栏】分析 Uniapp 与其他前端框架的异同
|
6月前
|
缓存 开发框架 安全
【Uniapp 专栏】详解 Uniapp 的网络请求功能特性
【5月更文挑战第13天】Uniapp是一款跨平台开发框架,提供便捷的网络请求功能,支持HTTP/HTTPS协议及GET/POST等多种请求方法。它允许设置请求参数、处理响应数据,并有超时时间、缓存策略及错误处理机制。还能与状态管理、页面交互结合,确保数据安全并进行性能优化。通过案例和比较,展现了Uniapp在网络请求上的优势,为开发高质量移动应用奠定基础。理解和掌握这些特性对于创建出色应用体验至关重要。
221 1
【Uniapp 专栏】详解 Uniapp 的网络请求功能特性
|
6月前
|
开发框架 前端开发 JavaScript
【Uniapp 专栏】Uniapp 中的动画效果实现与特性
【5月更文挑战第13天】Uniapp是一款跨平台开发框架,提供丰富的动画效果以提升用户体验和应用吸引力。基于CSS和JavaScript动画,支持转场、元素等多种动画类型,确保跨平台一致性并优化性能。通过CSS属性或JavaScript库实现动画,结合页面布局和手势操作,创造沉浸式交互。通过调试和优化,开发者可打造惊艳效果,适应未来技术发展,提升应用竞争力。
641 1
【Uniapp 专栏】Uniapp 中的动画效果实现与特性
|
6月前
|
缓存 JavaScript 测试技术
【Uniapp 专栏】在 Uniapp 中实现复杂交互的实战技巧
【5月更文挑战第12天】在Uniapp开发复杂交互时,需掌握组件化、事件机制、状态管理(如Vuex)及布局设计。利用动画增强用户体验,注意性能优化,有效处理与后端数据交互,并通过全面测试确保正确性。持续学习和借鉴社区资源,提升在复杂交互方面的技能。这些实战技巧有助于打造出色Uniapp应用。
117 5
|
存储 小程序 API
|
JavaScript