- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>vue中父子组件传值</title>
- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
- </head>
- <body>
- <div id="app">
- <counter :counte="1"></counter>
- <counter :counte="2"></counter>
- </div>
- </body>
- <script>
- //定义组件
- var counter = {
- props:['counte'],
- template: '<div @click="handleClick">{{counte}}</div>',
- methods: {
- handleClick(){
- this.counte ++
- }
- }
- }
- var t = new Vue({
- el:'#app',
- components:{
- counter
- }
- })
- </script>
- </html>

提示的意思是:你不要直接修改父组件传递过来的数据 --》在vue中有一个单向数据流的概念:父组件可以通过属性的形式向子组件传递参数,但是子组件绝对不能直接修改父组件传递过来的参数
解决bug并修改上面代码,如下所示
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>vue中父子组件传值</title>
- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
- </head>
- <body>
- <div id="app">
- <counter :counte="1"></counter>
- <counter :counte="2"></counter>
- </div>
- </body>
- <script>
- //定义组件
- var counter = {
- props:['counte'],
- template: '<div @click="handleClick">{{number}}</div>',
- data:function(){
- return{
- number:this.counte
- }
- },
- methods: {
- handleClick(){
- this.number ++
- }
- }
- }
- var t = new Vue({
- el:'#app',
- components:{
- counter
- }
- })
- </script>
- </html>
最终代码如下:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>vue中父子组件传值</title>
- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
- </head>
- <body>
- <div id="app">
- <counter :counte="1" @inc="handlenumberinc"></counter>
- <counter :counte="2" @inc="handlenumberinc"></counter>
- <div>{{total}}</div>
- </div>
- </body>
- <script>
- //定义组件
- var counter = {
- props:['counte'],
- template: '<div @click="handleClick">{{number}}</div>',
- data:function(){
- return{
- number:this.counte
- }
- },
- methods: {
- handleClick(){
- this.number =this.number + 2;
- this.$emit('inc',2)
- }
- }
- }
- var t = new Vue({
- el:'#app',
- components:{
- counter
- },
- data:{
- total:3
- },
- methods:{
- handlenumberinc(step){
- //step:就是子组件中的每次累加的数字
- this.total += step
- }
- }
- })
- </script>
- </html>