当前位置:   article > 正文

牛客刷题——前端面试【八】谈一谈组件化开发中父访问子(children、ref)_前端需要的children格式

前端需要的children格式

 前端面试秘法

提高个人编程能力就是不停的敲代码

这里我推荐一款前端面试神器----->点击跳转学习

系列内容请关注:前端面试

1.children、ref基本用法

2.ref的基本使用 用在元素上

3.ref在子组件上的使用

1. ref可以调用组件中的数据 

2.ref可以调用组件中的方法


1.children、ref基本用法

​ 父组件访问子组件,有时候需要直接操作子组件的方法,或是属性,此时需要用到$children$ref

使用this.$children直接获取**当前实例的直接子组件,需要注意 $children 并不保证顺序,也不是响应式的。**如果你发现自己正在尝试使用 $children 来进行数据绑定,考虑使用一个数组配合 v-for 来生成子组件,并且使用 Array 作为真正的来源。

  1. <!-- 父组件 -->
  2. <div id="app">
  3. <cpn></cpn>
  4. <cpn></cpn>
  5. <cpn ref="aaa"></cpn>
  6. <button @click="btnClick" >按钮</button>
  7. </div>
  8. <!-- 子组件 -->
  9. <template id="cpn">
  10. <div>
  11. 我是子组件
  12. </div>
  13. </template>
  14. <script src="../js/vue.js"></script>
  15. <script>
  16. // 父传子:props
  17. const cpn = {
  18. template: "#cpn",
  19. data() {
  20. return {
  21. name:"我是子组件的name"
  22. }
  23. },
  24. methods: {
  25. showMessage(){
  26. console.log("showMessage");
  27. }
  28. },
  29. };
  30. const app = new Vue({
  31. el: "#app",
  32. data() {
  33. return {
  34. message:"hello"
  35. }
  36. },
  37. methods: {
  38. btnClick(){
  39. // 1.children
  40. // console.log(this.$children[0].showMessage)
  41. // for (let cpn of this.$children) {
  42. // console.log(cpn.showMessage)
  43. // }
  44. // 2.$ref
  45. console.log(this.$refs.aaa.name)
  46. }
  47. },
  48. components: {
  49. cpn
  50. },
  51. })
  52. </script>

$children方式

  1. // 1.children
  2. console.log(this.$children[0].showMessage)
  3. for (let cpn of this.$children) {
  4. console.log(cpn.showMessage)
  5. }

$refs方式:ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例

2.ref的基本使用 用在元素上

  1. ref的基本使用 用在元素上
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <meta charset="utf-8">
  6. <title></title>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <p ref="p" @click="handelClick" id="ppp">hello</p>
  11. </div>
  12. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
  13. <script>
  14. const app = new Vue({
  15. el: "#app",
  16. data: {
  17. },
  18. methods: {
  19. handelClick(){
  20. console.log(this.$refs.p);
  21. const ppp = document.querySelector('#ppp')
  22. console.log(ppp);
  23. }
  24. },
  25. computed:{
  26. }
  27. })
  28. </script>
  29. </body>
  30. </html>

3.ref在子组件上的使用

1. ref可以调用组件中的数据 

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <counter ref="one" @change="handelChange"></counter>
  10. <counter ref="two" @change="handelChange"></counter>
  11. <div>total:{{total}}</div>
  12. </div>
  13. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
  14. <script>
  15. Vue.component('counter',{
  16. template:'<div @click="handelclick">{{number}}</div>',
  17. data(){
  18. return {
  19. number:0
  20. }
  21. },
  22. methods:{
  23. handelclick(){
  24. this.number++;
  25. this.$emit('change');
  26. }
  27. }
  28. })
  29. const app = new Vue({
  30. el: "#app",
  31. data: {
  32. total:0
  33. },
  34. methods: {
  35. handelChange(){
  36. this.total = this.$refs.one.number + this.$refs.two.number
  37. }
  38. },
  39. computed:{
  40. }
  41. })
  42. </script>
  43. </body>
  44. </html>

2.ref可以调用组件中的方法

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <helloworld ref="hello"></helloworld>
  10. <button @click="getHello">获取helloworld组件中的值</button>
  11. </div>
  12. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
  13. <script>
  14. Vue.component('helloworld',{
  15. template:'<div></div>',
  16. data(){
  17. return {
  18. number:0
  19. }
  20. },
  21. methods:{
  22. handelclick(){
  23. console.log('被调用了');
  24. }
  25. }
  26. })
  27. const app = new Vue({
  28. el: "#app",
  29. data: {
  30. },
  31. methods: {
  32. getHello(){
  33. this.$refs.hello.handelclick();
  34. console.log(this.$refs.hello.number);
  35. console.log(this.$refs.hello.$el.innerHTML);
  36. }
  37. },
  38. computed:{
  39. }
  40. })
  41. </script>
  42. </body>
  43. </html>

结束语:

这里推荐大家可以有效提高个人能力的平台

前端面试神器----->点击跳转

让我们一起进步,拿到自己想要的offer

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/721558
推荐阅读
相关标签
  

闽ICP备14008679号