vue2.0后子组件不允许直接改变父组件里的数据,但是我们实际项目常常需要这样的应用,2.0后,可以这样做,巧妙的通过mounted这个方法进行了中转,实现了想要的效果,下面是实例:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <script type="text/javascript" src="vue.js"></script> 7 <script type="text/javascript"> 8 window.onload = function(){ 9 var app = new Vue({ 10 el:'#box', 11 data:{ 12 myData:{ 13 info:'父组件信息' 14 } 15 }, 16 components:{ 17 'v-com':{ 18 props:['data'], 19 template:'#tpl', 20 methods:{ 21 change(){ 22 this.data.info = 'change info' 23 } 24 } 25 } 26 } 27 }) 28 } 29 </script> 30 </head> 31 <body> 32 <!-- 子组件改变父组件的数据 --> 33 <div id="box"> 34 <div> 35 <p>{{myData.info}}</p> 36 <v-com :data ="myData"></v-com> 37 </div> 38 </div> 39 40 <!-- 模板 --> 41 <template id="tpl"> 42 <div> 43 <button @click="change">change</button> 44 <p>{{data.info}}</p> 45 </div> 46 </template> 47 48 </body> 49 </html>
这种是同步改变数据,就是说子组件的数据改变,父组件数据也跟着改变,下面展示非同步的情况
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <script type="text/javascript" src="vue.js"></script> 7 <script type="text/javascript"> 8 window.onload = function(){ 9 var app = new Vue({ 10 el:'#box', 11 data:{ 12 myData:'父组件信息' 13 }, 14 components:{ 15 'v-com':{ 16 data() { 17 return { 18 childData:'' 19 } 20 }, 21 props:['data'], 22 // dom渲染完毕 23 mounted(){ 24 this.childData = this.data 25 }, 26 template:'#tpl', 27 methods:{ 28 change(){ 29 this.childData = 'change info' 30 } 31 } 32 } 33 } 34 }) 35 } 36 </script> 37 </head> 38 <body> 39 <!-- 子组件改变父组件的数据,不同步 --> 40 <div id="box"> 41 <div> 42 <p>{{myData}}</p> 43 <v-com :data ="myData"></v-com> 44 </div> 45 </div> 46 47 <!-- 模板 --> 48 <template id="tpl"> 49 <div> 50 <button @click="change">change</button> 51 <p>{{childData}}</p> 52 </div> 53 </template> 54 55 </body> 56 </html>
以上就是全部内容,希望对大家有用!