赞
踩
1.父组件给子组件传参时:
在:自定义属性.sync=“传递过去的变量”自定义属性名后面加上.sync表示传递的是一个同步变量
父组件: app.vue: 点击button更改子组件msg数据
- <div id="app">
- <h1>我是App父组件的内容</h1>
- <h1>父组件渲染自己的msg的值:{{msg}}</h1>
- <button @click="change">点我更改msg数据</button>
- <HelloWorld :msg.sync="msg" />
- </div>
- import HelloWorld from './components/HelloWorld.vue'
-
- export default {
- components: {
- HelloWorld
- },
- data(){
- return{
- msg:"父组件的msg数据",
- }
- },
- methods:{
- change(){
- this.msg="新更改的值!"
- },
-
- }
- }
2.子组件还是正常使用 props接收该变量
子组件: HelloWorld.vue:
- <div class="hello">
- <h2>我是Hello子组件</h2>
- <h2>父组件的msg数据:{{msg}}</h2>
- </div>
- export default {
- props: {
- msg:{
- type:String,
- default:"我是msg默认值",
- required:false
- }
- },
3.子组件想要更改当前父组件传递多来的数据时使用:
this.$emit("update:传递多来的属性名",新更改的值)
子组件: HelloWorld.vue: 点击子组件button更改父组件的数据
- <div class="hello">
- <h2>我是Hello子组件</h2>
- <h2>父组件的msg数据:{{msg}}</h2
- <button @click="change">点我改变父组件传过来的数据</button>
- </div>
- export default {
- data(){
- return{
- hehe:"我是子组件的hehe数据"
- }
- },
- methods:{
- change(){
- this.$emit("update:msg","子组件改的hehe")
- }
- }
- }
1.父组件直接获取子组件对象:
父组件:this.$children[索引]
索引值按照父组件的template加载顺序 为索引值顺序
拿到子组件对象就可以直接调用子组件的methods函数或者修改 自组建的data的数据
this.$children[索引值].data里面的变量
this.$children[索引].methodes里面的方法名()
父组件: app.vue: 点击改变子组件数据
- <div id="app">
- <h1>我是App父组件的内容</h1>
- <h1>父组件渲染自己的msg数据:{{parent_msg}}</h1>
- <button @click="change">点我直接更改子组件数据</button>
- <HelloWorld></HelloWorld>
- </div>
- import HelloWorld from './components/HelloWorld.vue'
- export default {
- components: {
- HelloWorld
- },
- data(){
- return{
- parent_msg:"父组件的msg内容"
- }
- },
- methods:{
- change(){
- this.$children[0].child_msg="父组件给你改的新值"
- }
- }
- }
子组件: HelloWorld.vue
- <div class="hello">
- <h2>我是Hello子组件</h2>
- <h2>渲染msg数据:{{child_msg}}</h2>
- </div>
- export default {
- data(){
- return{
- child_msg:"子组件的msg数据"
- }
- }
- }
2.子组件直接获取父组件对象
子组员:this.$parent
调用方法:
this.$parent.data变量/methods方法
子组件: Child.vue : 点击更改父组件数据
- <div id="child">
- <h2>我是Child子组件</h2>
- <button @click="change">点我修改父组件的数据</button>
- </div>
- export default {
- name: "Child",
- methods:{
- change(){
- // console.log(this.$parent);
- this.$parent.parent_msg="child子组件伸手改变的新值!"
- }
- }
- }
父组件: app.vue:
- <div id="app">
- <h1>我是App父组件的内容</h1>
- <h1>父组件渲染自己的msg数据:{{parent_msg}}</h1>
- <Child></Child>
- </div>
1可以获取原生DOM对象、
如果ref属性是定义在原生html标签上面 那么最终获取的就是原生DOM对象
2.可以获取子组件对象
如果ref属性是定义在自定义组件标签上面 那么最终获取的就是子组件的对象
<标签 ref="自定义名字"></标签>
获取方式:
this.$refs.ref定义的名字
- <div id="app">
- <h1>我是App父组件的内容</h1>
- <input type="file" id="file" ref="file">
- <button @click="getFile">点击获取file控件的dom对象</button>
- <button @click="getChild">点击获取child子组件对象</button>
- <Child ref="child"></Child>
- </div>
- import Child from "@/components/Child";
- export default {
- components: {
- Child
- },
- methods:{
- getFile(){
- // let fileDom=document.getElementById("file");
- // console.log(fileDom) 同理
- console.log(this.$refs.file)
- },
- getChild(){
- console.log(this.$refs.child);
- //获取到的是子组件的对象
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。