程序员社区

组件访问

目录

1.父访子

在父组件里拿到子组件里的属性和方法
①$children(用的较少)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <div>
    <cpn></cpn>
    <cpn></cpn>
    <cpn></cpn>
    <button @click="btnClick">按钮</button>
  </div>
</div>
<template id="cpn">
  <div>
    <h2>你我心境,都要四季如春</h2>
  </div>
</template>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    methods: {
      btnClick(){
        console.log(this.$children);
        for(let c of this.$children){
          console.log(c.name);
          c.showMessage();
        }
      }
    },
    components: {
      cpn: {
        template: `#cpn`,
        data() {
          return {
            name: '我是子组件的name'
          }
        },
        methods: {
          showMessage(){
            console.log("showMessage");
          }
        }
      }
    }
  })
</script>
</body>
</html>

在这里插入图片描述
点击按钮,控制台显示
在这里插入图片描述
缺点
我上面一共放了3个子组件,我现在想要拿到第3个组件的name属性
我要这样写:console.log(this.$children[2].name);
但是如果以后我根据需求,在第3个子组件前面又加了几个子组件
那么,这个时候,我再用this.$children[2].name,拿到的就不是原来的那个子组件了

②$refs
能够拿到指定的子组件,只要在子组件里加个ref属性作为标识
this.$refs默认是一个空的对象,子组件加了ref属性,才会在空对象里面追加其它属性

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <div>
    <cpn ref="aaa"></cpn>
    <cpn ref="bbb"></cpn>
    <cpn ref="ccc"></cpn>
    <button @click="btnClick">按钮</button>
  </div>
</div>
<template id="cpn">
  <div>
    <h2>你我心境,都要四季如春</h2>
  </div>
</template>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    methods: {
      btnClick(){
        console.log(this.$refs);
        console.log(this.$refs.aaa.name);
      }
    },
    components: {
      cpn: {
        template: `#cpn`,
        data() {
          return {
            name: '我是子组件的name',
          }
        },
        methods: {
          showMessage(){
            console.log("showMessage");
          }
        }
      }
    }
  })
</script>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

2.父访子

在子组件中
访问父组件用$parent属性
访问根组件$root属性

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <cpn></cpn>
</div>

<template id="cpn">
<div>
  <h2>我是cpn组件</h2>
  <button @click="btnClick">按钮</button>
  <ccpn></ccpn>
</div>
</template>

<template id="ccpn">
  <div>
    <h2>我是ccpn组件</h2>
    <button @click="btnClick2">按钮</button>
  </div>
</template>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    data:{
      message:'你好啊!'
    },
    components:{
      cpn: {
        template: `#cpn`,
        data(){
          return {
            name: '我是cpn组件里面的name'
          }
        },
        methods: {
          btnClick(){
            //访问父组件$parent
            console.log(this.$parent)
          },
        },
        components: {
          ccpn: {
            template: `#ccpn`,
            methods: {
              btnClick2() {
                //访问父组件$parent
                console.log(this.$parent)
                console.log(this.$parent.name)
                //访问根组件$root
                console.log(this.$root)
                console.log(this.$root.message)
              }
            }
          }
        }
      }
    }
  })
</script>
</body>
</html>

在这里插入图片描述
按第一个按钮显示:
在这里插入图片描述
按第二个按钮显示:
在这里插入图片描述

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 组件访问

一个分享Java & Python知识的社区