博客列表 >Vue组件:父子组件间数据的传递

Vue组件:父子组件间数据的传递

李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰原创
2021年01月20日 14:03:33914浏览

父级数据传递给子级:

1.父级组件通过v-bind把数据绑定到子组件的标签属性中。
2.自己组件通过实列props属性来接收父级传过来的数据即可
3.代码

  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>组件间数据的传递</title>
  8. <script src="vue.js" type="text/javascript" charset="utf-8"></script>
  9. </head>
  10. <body>
  11. <div class="app">
  12. <label for="num1">第一个数据:</label><input type="text" id="num1" v-model.number="num1">
  13. <label for="num2">第二个数据:</label><input type="text" id="num2" v-model.number="num2">
  14. <sum :sum="sum"></sum>
  15. </div>
  16. </body>
  17. <script>
  18. const vm=new Vue({
  19. el:".app",
  20. data:{
  21. num1:1,
  22. num2:2,
  23. },
  24. computed:{
  25. sum(){
  26. return this.num1+this.num2;
  27. }
  28. },
  29. components:{
  30. sum:{
  31. props:["sum"],
  32. template:`<h4>{{sum}}</h4>`,
  33. }
  34. }
  35. })
  36. </script>
  37. </html>

4.演示结果


子组件数据传递给父级组件

1.子组件的挂载点:html内容必须有一个标签包裹
2.子组件传数据

  • 主要通过子组件的$emit(“event”,参数)触发器
  • 触发器来传递至调用子组件时绑定在自定义事件@event的父级函数来传递给父级数据
    3.代码
    1. <!DOCTYPE html>
    2. <html lang="zh">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>组件间数据的传递</title>
    8. <script src="vue.js" type="text/javascript" charset="utf-8"></script>
    9. </head>
    10. <body>
    11. <div class="app">
    12. <span-sum @get="getsum"></span-sum>
    13. <h1>{{sum}}</h1>
    14. </div>
    15. <template id="son">
    16. <div>
    17. <label for="num1">第一个数据:</label><input type="text" id="num1" v-model.number="num1">
    18. <label for="num2">第二个数据:</label><input type="text" id="num2" v-model.number="num2">
    19. <button type="button" @click="getsum()">计算</button>
    20. <span>{{sum}}</span>
    21. </div>
    22. </template>
    23. </body>
    24. <script>
    25. // 子组件
    26. const spanSum={
    27. data(){
    28. return {
    29. num1:1,
    30. num2:2,
    31. sum:3,
    32. }
    33. },
    34. template:"#son",
    35. methods:{
    36. getsum(){
    37. this.sum=this.num1 + this.num2;
    38. this.$emit('get',this.sum);
    39. }
    40. }
    41. }
    42. // 父组件
    43. const vm=new Vue({
    44. el:".app",
    45. data:{
    46. sum:"答案",
    47. },
    48. components:{
    49. spanSum,
    50. },
    51. methods:{
    52. getsum(sum){
    53. console.log(sum);
    54. this.sum=sum;
    55. }
    56. }
    57. })
    58. </script>
    59. </html>
    4、演示结果

组件的基础知识:

1.组件实际上就是一个Vue实例,只不过时通过自定义标签名隐式挂载的
2.创建组件关键字:Vue.extend({})
3.注册全局组件:Vue.component(“自定义标签名”,组件)
4.组件的数据data,必须是一个函数的return返回值
5.组件可以重复利用,且是一个封闭的对象(避免污染全局)
6.一般不建议创建全局组件
7.全局组件,可以载任何vue实例模板中直接使用
8.代码

  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>组件的组成和分类</title>
  8. <script src="vue.js" type="text/javascript" charset="utf-8"></script>
  9. </head>
  10. <body>
  11. <div class="app">
  12. {{leave}}
  13. <child-div></child-div>
  14. <child-div></child-div>
  15. <!-- <child></child>
  16. <child></child>
  17. <child></child> -->
  18. </div>
  19. <template id="child">
  20. <span>子组件</span>
  21. </template>
  22. </body>
  23. <script type="text/javascript">
  24. // 创建组件
  25. const child=Vue.extend(
  26. {
  27. template:"#child",
  28. }
  29. );
  30. // 注册全局组件
  31. Vue.component("childDiv",child);
  32. const vm=new Vue({
  33. el:".app",
  34. data(){
  35. return {
  36. site:"种业圈",
  37. leave:"父级组件",
  38. }
  39. },
  40. // 局部组件
  41. components:{
  42. // child,
  43. }
  44. })
  45. </script>
  46. </html

9.运行结果

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议