美文网首页
vue全家桶(4.1)

vue全家桶(4.1)

作者: 螺钉课堂 | 来源:发表于2019-12-20 10:37 被阅读0次

5.状态管理

#5.1.兄弟组件之间共享数据的问题?

首先,我们需要了解下兄弟组件之间如何共享数据的问题

完成下列需求:

1、点击按钮,改变商品数量
2、点击加入购物车,在购物车的这个div盒子里需要显示当前有多少商品

image

本案例目录结构:

image

核心代码:

GoodsDemo.vue

<template>
  <div class="page">
    <shopping-car :goods_num="goods_num"></shopping-car>
    <ul>
      <goods-item @add="GoodsAdd"></goods-item>
    </ul>
  </div>
</template>

<script type="text/ecmascript-6">
import GoodsItem from '@/components/VuexDemo/GoodsItem'
import ShoppingCar from '@/components/VuexDemo/ShoppingCar'
export default {
  data () {
    return {
      goods_num: 0
    }
  },
  components: {
    GoodsItem,
    ShoppingCar
  },
  methods: {
    GoodsAdd (num) {
      this.goods_num += num
    }
  }
}
</script>

<style scoped>
ul{
  margin: 0;
  padding: 0;
  width: 280px;
  border: 1px solid black;
}
</style>

GoodsItem.vue

<template>
  <div class="page">
    <li>
      <img src="http://edu.nodeing.com/files/course/2018/12-18/151439fad2be715092.jpg" alt="">
      <p class="title">html+css快速入门</p>
      <p><button @click="decrease">-</button><input type="text" v-model="num"><button @click="increase">+</button></p>
      <button class="btn" @click="$emit('add', num)">加入购物车</button>
    </li>
  </div>
</template>

<script type="text/ecmascript-6">
export default {
  data () {
    return {
      num: 12
    }
  },
  components: {

  },
  methods: {
    GoodsAdd (num) {
      console.log(num)
    },
    increase () {
      this.num++
    },
    decrease () {
      this.num--
    }
  }
}
</script>

<style scoped>
li{
  list-style: none;
}
li img{
  width: 280px;
}
li p{
  text-align: center;
}
.btn{
    background-color: red;
    width: 150px;
    color: white;
    padding: 8px;
    border-radius: 8px;
    display: block;
    margin: 8px auto;
}
li input{
  color: black;
}
</style>

ShoppingCar.vue

<template>
  <div class="page">
    <div class="goods">购物车一共有:<span>{{ goods_num }}</span> 件商品</div>
  </div>
</template>

<script type="text/ecmascript-6">
export default {
  data () {
    return {

    }
  },
  components: {

  },
  props: {
    goods_num: Number
  }
}
</script>

<style scoped>
.goods{
  background-color: green;
  width: 250px;
  padding: 16px;
  color: white;
}
.goods span{
  color: red
}
</style>

从上面代码中,我们来看看数据是怎么传输的

image
1、 当用户点击GoodsItem组件中添加到购物车这个按钮,此时需要获取到商品的数量(num),然后传输给父组件GoodsDemo

2、父组件拿到这个子组件传过来的数据(num) 去更新自己身上的变量goods_num

3、把这个goods_num的数据传给子组件ShoppingCar

image

相关文章

  • vue全家桶(4.1)

    5.状态管理 #5.1.兄弟组件之间共享数据的问题? 首先,我们需要了解下兄弟组件之间如何共享数据的问题 完成下列...

  • 2019-03-25

    vue 全家桶 Vue有著名的全家桶系列,包含了: vue-router,vuex,vue-re...

  • 前端面试2021.4.9

    面试题正文: 1.vue全家桶包含哪些? 答案:vue全家桶与react全家桶介绍 2.v-model是什么?怎么...

  • 前端面试2021.4.9

    面试题正文: 1.vue全家桶包含哪些? 答案:vue全家桶与react全家桶介绍 2.v-model是什么?怎么...

  • Vue生态圈(全家桶)

    vue全家桶及项目架构 Vue有著名的全家桶系列,包含了vue-router(http://router.vuej...

  • vue + typescript

    Vue全家桶+TypeScript使用总结

  • vue全家桶

    vue-cli + vue2.0 + vuex + vue-route + axios + element-ui ...

  • VUE全家桶

    注意:这里只讲VUE脚手架搭建的项目首先安装开发环境,vue-cli 一键搭建vue项目是基于 Node.js 所...

  • Vue全家桶

    食材: vue-cli,vuex babel-preset-es201X, node-sass,sass-load...

  • Vue全家桶

    生态系统 UI 组件库 图表

网友评论

      本文标题:vue全家桶(4.1)

      本文链接:https://www.haomeiwen.com/subject/gmmbnctx.html