Vue分页效果与购物车功能


Posted in Javascript onDecember 13, 2019

分页组件

首先来创建项目:

分页组件,做项目不要写动手写代码,要想想业务逻辑,怎么写,如何写才是最好的呈现方式,做项目不急,要先想好整体的框架,从底层一开始最想要的是什么做起。

先动代码,边做边想是会出问题的,而且还会卡壳,让你半路出家的。

分页组件,你觉得要什么内容,是页面?如果不懂可以去看看别人的分页是怎么做的,考虑业务逻辑,整体出发去思考问题。要不然我去百度看看,别人的分页效果。

Vue分页效果与购物车功能

看了后做不出来也是没有关系的,我们呢?

可以从底部出发,从最小的逻辑开始,从做这个需要考虑到什么想起,一步一步来,做好局部的功能,这个功能做好了,才去做另一个功能或者页面哦~

分页组件我们需要的字段有哪些?

你想想,当前页,是不是有,curpage当前页,每页的大小,pagesize,总的页数,total,等等,考虑不到的,没关系看看别人的有什么,想好后才写代码,那才快。

不说无用,先创建项目:

Vue分页效果与购物车功能

写的分页组件

props: ['total'],
data: function() {
 return {
 page: 1, // 当前页码
 pagesize: 10 // 每一页的记录数
 });
},

是不是只能想到那么多呢?那就先写那么多,然后再想想需要什么:

总页码 = Math.ceil(总记录数/每一页记录数)

总页码数,7页,或6页,当前是向上取整,每一页记录数10页,总记录数,总的多少页。如80除10页,8页。

math.ceil(x)返回大于等于参数x的最小整数,即对浮点数向上取整.

单击事件,切换不同的页面的效果。

<div id="app">
<h1>分页组件</h1>
//父
<page-component :total="total"></page-component>
</div>

<template id="page-component">
 <ul class="pagination">
 <li :class="p == page ? 'page-item active' : 'page-item'"
 v-for="p in pagecount">
 <a href="#" rel="external nofollow" class="page-link" @click.prevent="page=p">
 {{p}}
 </a>
 </li>
 </ul>
 </template>

@click.stop 阻止事件冒泡

@click.prevent 阻止事件的默认行为,

<script src="vue.js"> </script>
<script>
// 定义组件
const PageComponent = {
 name: 'PageComponent',
 template: '#page-component',
 props: ['total'],
 
 data: function() {
 return {
 page: 1, // 当前页码
 pagesize: 10 // 每一页的记录数
 };
 },
 
 computed: {
 pagecount: function() {
 // 总页数
 return Math.ceil(this.total / this.pagesize);
 }
 }
 
};

// 创建Vue实例对象
const app = new Vue({
 el: '#app',
 data: {
 total: 35
 },
 
 components: {
 PageComponent
 }
 
});
</script>

分页效果大致如此。

购物车组件

购物车组件,是做项目不可少的,面试也是,动不动就叫我上机写个购物车的组件,写就写咯,购物车时做商城项目不可少的,写好购物车组件会很方便,简书代码的重复性。

那么想想购物车组件有什么内容呢?

购物车,是不是有:商品名称,单价,增加删减单品的数量呢?还有就是订单总金额数呢?这些是必不可少的哦!!!

Vue分页效果与购物车功能

购物车组件不知道有什么也是可以去看看别人的先,看看有什么,购物车组件一般包含显示商品的名称,单价,购买的数量以及订单总金额,通过增加或减少商品的购买的数据,并同步更改订单的总金额。

总金额同步,我们能想到的是用什么指令,是不是v-model

v-model指令的双向绑定

// v-model指令双向绑定
updateCount: function() {
 // 触发input事件
 this.$emit('input', this.count);
}

vue中监听input输入值变化的事件,原生事件;

this.$emit(),是触发器,用于父子组件的传值。

this.$emit(事件,值)

父组件:

<Group title="用户名" v-model="username"></Group>

子组件:

<template>
 <div>
  <div class="group">
   <label>{{title}}</label>
   <input type="text" placeholder="请输入" @input="changeData()" v-model="val">
  </div>
 </div>
</template>

<script>
export default {
 props:["title"],
 data () {
  return {
   val:""
  }
 },
 methods:{
  changeData:function(){
   this.$emit('input',this.val);
  }
 }
}
</script>

当商品的购买数量发生变化时,订单总金额也再变。

这个时候应该想到computed属性:

// computed属性定义下的:

amount: function() {
 var money = 0;
 this.goodslist.forEach(goods => {
 money += parseInt(goods.count) * parseInt(goods.price);
 });
 return money;
}

v-model双向绑定实际上是通过子组件中$emit方法派发的input事件,父组件监听input事件中传递的value值,并存储在父组件data中,然后父组件通过prop的形式传递给子组件value值,在子组件中绑定Input的value属性。

代码:

// 父组件
<myDa :value="value" @input="value=$event"></my-comp>

:value = "value"

<input type="text" @input="$emit('input', $event.target.value)" :value="value">

子组件使用监听事件使用

emit(eventName)触发事件

购物车最终代码:

<div id="app">
<div v-for="goods in goodslist">
<p>商品名称:{{goods.name}}</p>
<p>单价:{{goods.price}}</p>
<cart-component v-model="goods.count">
</cart-component>
<hr>
</div>

<div>

订单总金额:{{amount}}元

</div>
</div>

<template id="cart-component">
<div class="cart">
<button @click="count--; updateCount();">
-
</button>

<input type="text" v-model="count" 
@input=updateCount()">

<button @click="count++; updateCount();"> 
+ 
</button>
</div>
</template>

<script>
// 定义组件
const CartComponent = {
 name: 'Cart',
 template: '#cart-component',
 // 在组件中不可直接修改props数据
 props: ['value'],
 data: function() {
 return {
 count: this.value
 };
 },
 methods: {
 // v-model指令双向绑定,修改父组件内容
 updateCount: function() {
 // 触发input事件
 this.$emit('input',this.count);
 }
 }
};

// 创建vue实例对象
const app = new Vue({
 el: '#app',
 data: {
 goodslist; [{
 name: 'apple',
 price: 2,
 count: 2
 },{
 name: 'dada',
 price: 222222222222,
 count: 0
 }]
 },
 
 computed: {
 // 当前订单总金额
 amount: function(){
 var money=0
 this.goodslist.forEach(goods=>{
 money += pareseInt(goods.count) * parseInt(goods.price);
 });
 return money;
 }
 },
 components: {
 CartComponent
 }
});
</script>

vue:自定义组件中v-model以及父子组件的双向绑定

<div id="app">
 <p>{{message}}</p>
 <input type="text" v-model='message'>
</div>
<script>
 var vueApp = new Vue({
  el:'#app',
  data:{
   message:"我其实是一个语法糖"
  }
 })
</script>
<div id="app">
 <p>{{message}}</p>
 <input type="text" v-bind:value='message' @input='message = $event.target.value'>
</div>
<script>
 var vueApp = new Vue({
  el: '#app',
  data: {
   message: "我其实是一个语法糖"
  }
 })
</script>

以下两种约等于:

<custom v-model='something'></custom>
<custom :value="something" @input="value => { something = value }"></custom>
<div id="app">
 <h1>{{message}}</h1>
 <test-model v-model='message'></test-model>
</div>
<script>
 Vue.component('test-model', {
  template: ` <input v-bind:value='value'
     v-on:input="$emit('input', $event.target.value)">`,
 })
 var vueApp = new Vue({
  el: '#app',
  data: {
   message: '测试数据'
  },
 })
</script>

vue实际中的应用开发就到此结束了,后续敬请期待!!!

总结

以上所述是小编给大家介绍的Vue分页效果与购物车功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
Prototype最新版(1.5 rc2)使用指南(1)
Jan 10 Javascript
javascript检测页面是否缩放的小例子
May 16 Javascript
jquery ajax post提交数据乱码
Nov 05 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
Jan 26 Javascript
jQuery 3.0 的变化及使用方法
Feb 01 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
Feb 05 Javascript
JS 设置Cookie 有效期 检测cookie
Jun 15 Javascript
webpack dll打包重复问题优化的解决
Oct 10 Javascript
react高阶组件添加和删除props
Apr 26 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
Sep 03 Javascript
Vue实现按钮级权限方案
Nov 21 Javascript
微信小程序实现横向滚动导航栏效果
Dec 12 Javascript
如何在微信小程序中存setStorage
Dec 13 #Javascript
在微信小程序中使用mqtt服务的方法
Dec 13 #Javascript
微信小程序之左右布局的实现代码
Dec 13 #Javascript
vue实现输入一位数字转汉字功能
Dec 13 #Javascript
小程序登录之支付宝授权的实现示例
Dec 13 #Javascript
小程序使用wxs解决wxml保留2位小数问题
Dec 13 #Javascript
微信小程序点击保存图片到本机功能
Dec 13 #Javascript
You might like
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
Python自定义线程池实现方法分析
2018/02/07 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
分析python请求数据
2018/08/19 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
python中@contextmanager实例用法
2021/02/07 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
一份Java笔试题
2012/02/21 面试题
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
学生手册家长评语
2014/02/10 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
2014年毕业演讲稿范文
2014/05/13 职场文书
个人委托书如何写
2014/09/25 职场文书
土地转让协议书
2014/09/27 职场文书
审美与表现自我评价
2015/03/09 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
小学家长意见怎么写
2015/06/03 职场文书
九不准学习心得体会
2016/01/23 职场文书
新员工入职感言范文!
2019/07/04 职场文书
python常见的占位符总结及用法
2021/07/02 Python
python微信智能AI机器人实现多种支付方式
2022/04/12 Python