vue2封装一个步进器组件number-box

这篇具有很好参考价值的文章主要介绍了vue2封装一个步进器组件number-box。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近做一个商城的项目,商品的详情页和购物车列表都需要用到上面数量增减的功能,其实这个是一个很普通的功能,但是购物车的列表是放到vuex里面的,这里记录使用的差别:

首先封装number-box组件:

<template>
    <div class="numBox">
        <button class="btn" @click="jian">-1</button>
        <input type="text" @change="handleChange" style="width:50px;" :value="value" />
        <button class="btn" @click="add">+1</button>
    </div>
</template>
<script>
export default {
  name: 'demoPage',
  props: {
    value: {
      type: Number,
      default: 1
    }
  },
  data () {
    return {

    }
  },
  methods: {
    add () {
      this.$emit('input', this.value + 1)
    },
    jian () {
      if (this.value <= 1) return
      this.$emit('input', this.value - 1)
    },
    handleChange (e) {
      const num = +e.target.value
      if (isNaN(num) || num < 1) {
        e.target.value = this.value
      } else {
        this.$emit('input', num)
      }
    }
  }
}
</script>

在列表页去引用,并使用v-vmode传递数据:

<ul>
      <li v-for="(item,index) in list" :key="index">
           <div>{{item.name}}</div>
           <NumberBox v-model="item.num"></NumberBox>
      </li>
 </ul>


 data () {
    return {
      num: 10,
      list: [
        { id: 1, name: '商品1', num: 1 },
        { id: 2, name: '商品2', num: 2 },
        { id: 3, name: '商品3', num: 3 }
      ]
    }
  },

如果数据是直接在data下面,直接循环绑定num,触发增减按钮,list的数据能整成增减。但是这里有个特殊的情况,如果list的数据是在vuex里面的,利用上面的绑定,是不能实现list里面num的增减的,需要更改绑定的方式:

<template>
    <div>
        <ul>
            <li v-for="(item,index) in list" :key="index">
                <div>{{item.name}}</div>
                <NumberBox :value="item.num" @input="changNum(item.id,$event)"></NumberBox>
            </li>
        </ul>
    </div>
</template>

<script>
import NumberBox from '../components/NumberBox.vue'
import { mapState } from 'vuex'
export default {
  name: 'demoPage',
  components: {
    NumberBox
  },
  data () {
    return {
      num: 10
    }
  },
  methods: {
    changNum (id, val) {
      this.$store.commit('demo/changeNum', { id, val })
    }
  },
  computed: {
    ...mapState('demo', ['list'])
  }
}
</script>

vuex部分的代码:

export default {
  namespaced: true,
  state () {
    return {
      list: [
        { id: 1, name: '商品1', num: 1 },
        { id: 2, name: '商品2', num: 2 },
        { id: 3, name: '商品3', num: 3 }
      ]
    }
  },
  mutations: {
    changeNum (state, obj) {
      const good = state.list.find(item => item.id === obj.id)
      good.num = obj.val
    }
  }
}

这样也能实现绑定的效果:

vue2封装一个步进器组件number-box,前端,javascript,html,vue.jsvue2封装一个步进器组件number-box,前端,javascript,html,vue.js文章来源地址https://www.toymoban.com/news/detail-759424.html

到了这里,关于vue2封装一个步进器组件number-box的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 封装vue2局部组件都要注意什么

    template  =  组件的模板结构  (必选) 每个组件对应的模板结构,需要定义到template节点中 template中使用的指令 template定义根节点 注:vue 2.x版本中,template节点内dom结构仅支持单个根节点;但在vue 3.x版本中,支持多个根节点 script  =  组件的javascript行为  (可选) script中的

    2024年02月13日
    浏览(49)
  • vue 封装一个Dialog组件

    基于element-plus封装一个Dialog组件

    2024年02月09日
    浏览(35)
  • vue~封装一个文本框标签组件

    父组件向子组件的传值 类型检查和默认值:您可以为props指定类型检查和默认值。这可以确保传递给子组件的数据符合期望的类型,以及在没有传递数据时具有合理的默认值。例如: 在上述示例中,message 的默认值是字符串 \\\'Default Message\\\',count 的默认值是数字 0。 :dic是子组件

    2024年02月08日
    浏览(41)
  • 前端歌谣-第伍拾陆课-vue2-element组件封装el-button-groups(续)

    我是歌谣 今天继续给大家带来el-button-groups(项目的讲解

    2024年02月03日
    浏览(41)
  • Vue2自己封装的基础组件库或基于Element-ui再次封装的基础组件库,如何发布到npm并使用(支持全局或按需引入使用),超详细

    以下我以 wocwin-admin-vue2 项目为例 修改目录结构,最终如下 1、导入组件,组件必须声明 name 2、定义 install 方法,接收 Vue 作为参数。如果使用 use 注册插件,则所有的组件都将被注册 3、导出的对象必须具有 install,才能被 Vue.use() 方法安装(全局使用) 4、按需引入 5、packa

    2024年02月08日
    浏览(82)
  • vue2.x-echarts公共组件封装--简易篇(3d柱状图,炫酷仪表盘,折线,曲线图)

    更新一下之前写的echarts简单图表公共组件的封装,该组件可以实现自适应展示效果 废话不多说,上代码: vue-echarts通用组件 下面的一个混入文件是用来实现,窗口改变echarts自适应的js文件: 接下来是debounce.js 下面直接上代码:父组件调用+展示效果 截图: 下面是一个仪表盘

    2023年04月13日
    浏览(72)
  • vue~封装一个文本框添加与删除的组件

    这是一个div,包含了两个文本框,后面是添加和删除按钮 添加按钮复制出新的div,除了文本框没有内容,其它都上面一样 删除按钮将当前行div删除 提交之后,将出现当前你添加的这个列表的对象,对接后端接口,将这个数组POST到后端即可,如图所示:

    2024年02月08日
    浏览(37)
  • 记录--封装一个通过js调用的全局vue组件

    在使用vue项目编写的时候,不可避免的会碰到需要时js api来调用组件进行显示的情况 例如饿了么element ui 的 Notification 通知、Message 消息提示等组件 虽然已经提供了,但是由于api的限制,我们只能通过特定的参数来有限的改变组件的样式 之前的文章说过可以使用 new Vue() 、

    2024年02月09日
    浏览(58)
  • 封装一个类似微信通讯录带有字母检索功能的vue组件

    这里我们直接使用 scrollIntoView 方法 该方法将调用它的元素滚动到浏览器窗口的可见区域 element.scrollIntoView(); // 等同于element.scrollIntoView(true) element.scrollIntoView(alignToTop); //布尔参数 element.scrollIntoView(scrollIntoViewOptions); //对象参数 分析一下功能就知道很简单了。 首先需要

    2024年02月12日
    浏览(62)
  • 使用Vue2开发一个图片预览组件,支持多图切换、缩放旋转、鼠标滚轮、键盘按键、拖动等等操作

    话不多说,咱们赶紧来开启本章的内容,这次小编给各位带来的依旧是实用类文章,分享如何开发一个完整的 图片预览组件 ,它支持多图切换、放大缩小、旋转、鼠标滚轮操作、键盘按键控制、拖动等等的功能,并且使用方便、易扩展,零依赖。 项目演示技术小编采用的是

    2024年02月09日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包