赞
踩
提高个人编程能力就是不停的敲代码
这里我推荐一款前端面试神器----->点击跳转学习
系列内容请关注:前端面试
父组件访问子组件,有时候需要直接操作子组件的方法,或是属性,此时需要用到$children
和$ref
。
使用this.$children
直接获取**当前实例的直接子组件,需要注意 $children
并不保证顺序,也不是响应式的。**如果你发现自己正在尝试使用 $children
来进行数据绑定,考虑使用一个数组配合 v-for
来生成子组件,并且使用 Array 作为真正的来源。
- <!-- 父组件 -->
- <div id="app">
- <cpn></cpn>
- <cpn></cpn>
- <cpn ref="aaa"></cpn>
- <button @click="btnClick" >按钮</button>
- </div>
- <!-- 子组件 -->
- <template id="cpn">
- <div>
- 我是子组件
- </div>
- </template>
- <script src="../js/vue.js"></script>
- <script>
- // 父传子:props
- const cpn = {
- template: "#cpn",
- data() {
- return {
- name:"我是子组件的name"
- }
- },
- methods: {
- showMessage(){
- console.log("showMessage");
- }
- },
- };
- const app = new Vue({
- el: "#app",
- data() {
- return {
- message:"hello"
- }
- },
- methods: {
- btnClick(){
- // 1.children
- // console.log(this.$children[0].showMessage)
- // for (let cpn of this.$children) {
- // console.log(cpn.showMessage)
- // }
- // 2.$ref
- console.log(this.$refs.aaa.name)
- }
- },
- components: {
- cpn
- },
- })
- </script>
$children
方式
- // 1.children
- console.log(this.$children[0].showMessage)
- for (let cpn of this.$children) {
- console.log(cpn.showMessage)
- }
$refs方式:ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例
- ref的基本使用 用在元素上
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
-
- </head>
- <body>
- <div id="app">
- <p ref="p" @click="handelClick" id="ppp">hello</p>
- </div>
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
- <script>
- const app = new Vue({
- el: "#app",
- data: {
-
- },
- methods: {
- handelClick(){
- console.log(this.$refs.p);
- const ppp = document.querySelector('#ppp')
- console.log(ppp);
- }
- },
- computed:{
-
- }
- })
- </script>
- </body>
- </html>
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
-
- </head>
- <body>
- <div id="app">
- <counter ref="one" @change="handelChange"></counter>
- <counter ref="two" @change="handelChange"></counter>
- <div>total:{{total}}</div>
- </div>
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
- <script>
- Vue.component('counter',{
- template:'<div @click="handelclick">{{number}}</div>',
- data(){
- return {
- number:0
- }
- },
- methods:{
- handelclick(){
- this.number++;
- this.$emit('change');
- }
- }
- })
- const app = new Vue({
- el: "#app",
- data: {
- total:0
- },
- methods: {
- handelChange(){
- this.total = this.$refs.one.number + this.$refs.two.number
- }
- },
- computed:{
-
- }
- })
- </script>
- </body>
- </html>
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
-
- </head>
- <body>
- <div id="app">
- <helloworld ref="hello"></helloworld>
- <button @click="getHello">获取helloworld组件中的值</button>
- </div>
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
- <script>
- Vue.component('helloworld',{
- template:'<div></div>',
- data(){
- return {
- number:0
- }
- },
- methods:{
- handelclick(){
- console.log('被调用了');
- }
- }
- })
- const app = new Vue({
- el: "#app",
- data: {
-
- },
- methods: {
- getHello(){
- this.$refs.hello.handelclick();
- console.log(this.$refs.hello.number);
- console.log(this.$refs.hello.$el.innerHTML);
- }
- },
- computed:{
-
- }
- })
- </script>
- </body>
- </html>
结束语:
这里推荐大家可以有效提高个人能力的平台
前端面试神器----->点击跳转
让我们一起进步,拿到自己想要的offer
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。