一.单向数据流

  1. //Tips:在vue中,子组件不能直接修改从父组件传递过来的数据
  1. //1.新建子组件
  2. <template>
  3. <div @click="handleAdd">{{data}}</div>
  4. </template>
  5. <script>
  6. export default {
  7. methods:{
  8. handleAdd(){
  9. //通过$emit传数据,$emit()有两个参数,第一个是传递的事件,第二个是要传递的数据
  10. this.$emit("add")
  11. }
  12. },
  13. props:{
  14. data:{ //接收父组件传递过来的数据
  15. type:Number,
  16. required:true
  17. }
  18. },
  19. }
  20. </script>
  1. //2.父组件
  2. <template>
  3. <div class="home">
  4. <h4>{{count}}</h4>
  5. <count :data="count" @add="handleAdd"/>
  6. </div>
  7. </template>
  8. /* @add=handleAdd:自定义事件 */
  9. <script>
  10. import Count from '@/components/Count.vue'
  11. export default {
  12. name: 'home',
  13. data(){
  14. return{
  15. count:10
  16. }
  17. },
  18. components:{
  19. Count
  20. },
  21. methods:{
  22. handleAdd(){
  23. this.count++
  24. }
  25. }
  26. }
  27. </script>

二.双向数据流

点击下面的12之后数据全部更改为12
2.gif

  1. //1.新建一个子组件
  2. <template>
  3. <div @click="add">
  4. {{data}}
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. name:"Test",
  10. props:{
  11. data:{
  12. type:Number,
  13. required:true
  14. }
  15. },
  16. methods:{
  17. add(){
  18. this.$emit("update:data",12) //数据更新
  19. }
  20. }
  21. }
  22. </script>
  23. <style lang="scss" scoped>
  24. </style>
  1. //2.在父组件中引入子组件
  2. <template>
  3. <div class="home">
  4. <h4>{{count}}</h4>
  5. <test :data.sync="count"></test>
  6. </div>
  7. </template>
  8. <script>
  9. import Test from '@/components/Test.vue'
  10. export default {
  11. name: 'home',
  12. data(){
  13. return{
  14. count:10
  15. }
  16. },
  17. components:{
  18. Test
  19. },
  20. }
  21. </script>