父组件给子组件传值原理:属性绑定
第一步:建立连接
B.vue
<template> <div> <h3>这是B.vue文件内容</h3> <h4>接收到父组件的值----{{msg}}</h4> <h4>接收到父组件的值----{{obj}}</h4> </div> </template> <script> export default { // vue要保证props数据的原装行(自读),不建议修改,修改会报错 // 如果想要修改,先预存到data中 props: ['msg','obj'] } </script> <style lang="less" scoped> div { border: 2px dashed purple; margin: 20px; h3 { color: green; } } </style>
A.vue
<template> <div class="one"> <h1>这是A.vue文件内容</h1> <!-- 属性绑定传值 --> <my-b :msg="Amsg" :obj="Aobj"></my-b> </div> </template> <script> // 导入子组件 import B from './B.vue' export default { // 定义为私有子组件 components: { 'my-b': B }, data() { return { Amsg: '这是父组件A的数据', Aobj: {name: "爸爸",age: 40} } } } </script> <style lang="less" scoped> .one { border: 1px solid red; h1 { color: red; } } </style>
index.js
// 导入vue import Vue from 'vue/dist/vue.js' // 导入自定义组件模板 import A from './A.vue' // 定义为全局子组件 Vue.component('my-a',A) const vm = new Vue({ el: '#app', data: { }, })
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>首页</title> </head> <body> <div id="app"> <p>这是index.html</p> <my-a></my-a> </div> </body> </html>
第二步:传值
第三步:子组件接收值并修改值
父组件传递过来值,如果要修改父组件的值,怎么办?
简单数据类型:直接在data中return定义,接收props中的值
复杂数据类型:
对象在传递过程中,它是把这个对象的引用传递过去了,在内存空间中仍然指向同一块区域;
不像字符串,字符串是直接复制一份传递过去的,在内存空间中指向新的区域
解决办法:深拷贝
安装包:
使用: