当前位置:   article > 正文

vue 父子组件双向数据绑定,调用 使用ref获取原生DOM_vue ref 表单绑定方式

vue ref 表单绑定方式

子组件之间双向数据绑定

1.父组件给子组件传参时:

在:自定义属性.sync=“传递过去的变量”自定义属性名后面加上.sync表示传递的是一个同步变量

父组件: app.vue: 点击button更改子组件msg数据

  1. <div id="app">
  2. <h1>我是App父组件的内容</h1>
  3. <h1>父组件渲染自己的msg的值:{{msg}}</h1>
  4. <button @click="change">点我更改msg数据</button>
  5. <HelloWorld :msg.sync="msg" />
  6. </div>
  7. import HelloWorld from './components/HelloWorld.vue'
  8. export default {
  9. components: {
  10. HelloWorld
  11. },
  12. data(){
  13. return{
  14. msg:"父组件的msg数据",
  15. }
  16. },
  17. methods:{
  18. change(){
  19. this.msg="新更改的值!"
  20. },
  21. }
  22. }

2.子组件还是正常使用 props接收该变量

子组件: HelloWorld.vue:

  1. <div class="hello">
  2. <h2>我是Hello子组件</h2>
  3. <h2>父组件的msg数据:{{msg}}</h2>
  4. </div>
  5. export default {
  6. props: {
  7. msg:{
  8. type:String,
  9. default:"我是msg默认值",
  10. required:false
  11. }
  12. },

3.子组件想要更改当前父组件传递多来的数据时使用:

this.$emit("update:传递多来的属性名",新更改的值)

子组件: HelloWorld.vue: 点击子组件button更改父组件的数据

  1. <div class="hello">
  2. <h2>我是Hello子组件</h2>
  3. <h2>父组件的msg数据:{{msg}}</h2
  4. <button @click="change">点我改变父组件传过来的数据</button>
  5. </div>
  6. export default {
  7. data(){
  8. return{
  9. hehe:"我是子组件的hehe数据"
  10. }
  11. },
  12. methods:{
  13. change(){
  14. this.$emit("update:msg","子组件改的hehe")
  15. }
  16. }
  17. }

父组件直接相互直接调用(不常用)

1.父组件直接获取子组件对象:

父组件:this.$children[索引]

索引值按照父组件的template加载顺序 为索引值顺序

拿到子组件对象就可以直接调用子组件的methods函数或者修改 自组建的data的数据

this.$children[索引值].data里面的变量

this.$children[索引].methodes里面的方法名()

父组件: app.vue: 点击改变子组件数据

  1. <div id="app">
  2. <h1>我是App父组件的内容</h1>
  3. <h1>父组件渲染自己的msg数据:{{parent_msg}}</h1>
  4. <button @click="change">点我直接更改子组件数据</button>
  5. <HelloWorld></HelloWorld>
  6. </div>
  7. import HelloWorld from './components/HelloWorld.vue'
  8. export default {
  9. components: {
  10. HelloWorld
  11. },
  12. data(){
  13. return{
  14. parent_msg:"父组件的msg内容"
  15. }
  16. },
  17. methods:{
  18. change(){
  19. this.$children[0].child_msg="父组件给你改的新值"
  20. }
  21. }
  22. }

子组件: HelloWorld.vue

  1. <div class="hello">
  2. <h2>我是Hello子组件</h2>
  3. <h2>渲染msg数据:{{child_msg}}</h2>
  4. </div>
  5. export default {
  6. data(){
  7. return{
  8. child_msg:"子组件的msg数据"
  9. }
  10. }
  11. }

2.子组件直接获取父组件对象

子组员:this.$parent

调用方法:

this.$parent.data变量/methods方法

子组件: Child.vue : 点击更改父组件数据

  1. <div id="child">
  2. <h2>我是Child子组件</h2>
  3. <button @click="change">点我修改父组件的数据</button>
  4. </div>
  5. export default {
  6. name: "Child",
  7. methods:{
  8. change(){
  9. // console.log(this.$parent);
  10. this.$parent.parent_msg="child子组件伸手改变的新值!"
  11. }
  12. }
  13. }

父组件: app.vue:

  1. <div id="app">
  2. <h1>我是App父组件的内容</h1>
  3. <h1>父组件渲染自己的msg数据:{{parent_msg}}</h1>
  4. <Child></Child>
  5. </div>

ref属性的使用

1可以获取原生DOM对象、

如果ref属性是定义在原生html标签上面 那么最终获取的就是原生DOM对象

2.可以获取子组件对象

如果ref属性是定义在自定义组件标签上面 那么最终获取的就是子组件的对象
<标签 ref="自定义名字"></标签>

获取方式:

this.$refs.ref定义的名字

  1. <div id="app">
  2. <h1>我是App父组件的内容</h1>
  3. <input type="file" id="file" ref="file">
  4. <button @click="getFile">点击获取file控件的dom对象</button>
  5. <button @click="getChild">点击获取child子组件对象</button>
  6. <Child ref="child"></Child>
  7. </div>
  8. import Child from "@/components/Child";
  9. export default {
  10. components: {
  11. Child
  12. },
  13. methods:{
  14. getFile(){
  15. // let fileDom=document.getElementById("file");
  16. // console.log(fileDom) 同理
  17. console.log(this.$refs.file)
  18. },
  19. getChild(){
  20. console.log(this.$refs.child);
  21. //获取到的是子组件的对象
  22. }
  23. }
  24. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/133946?site
推荐阅读
相关标签
  

闽ICP备14008679号