当前位置: 首页 > news >正文

vue 组件通信

父子

//  // 1//  <body>//     <div id="app">//       <!-- 1 父子通信 -->//       <list></list>//     </div>
//     <script src="./vue.js"></script>//     <script>//       const list = {//         name:'list',//         template: `
//           <ul>//             <item m='父组件传入的消息' ></item>//           </ul>//         `,//         data:function(){//           return {//             msg:'父组件的信息'//           }//         }//       };
//       const item = {//         name:'item',//         template: `//           <li> {{m}} </li>//         `,//         props: ["m"]//       };
//       const components_arr = [list,item];//       components_arr.forEach((com) => {
//         Vue.component(com.name,com)//       })//       var app = new Vue({//         el: "#app"//       });//     </script>//   </body>



// // 2// <body>//   <div id="app">//     <list :list-movies="movies"></list>//   </div>
//   <script src="./vue.js"></script>//   <script>//     /*//       list 相对于app 来说是子组件 name在list上写 :list-movies='movies' 在props中写 listMovies 是app作为父级向子组件list传值//       需要注意 名字的命名方式
//       item 相对于list来说是子组件
//     *///     const list = {//       name: "list",//       template: `//         <ul  >//           <item v-for='(mov,index) in listMovies' :key="index"  :nam='mov' :ind="index" ></item>//         </ul>//       `,//       props: ["listMovies"]//     };
//     const item = {//       name: "item",//       template: `//           <li  > {{ind}} - {{nam}} </li>//       `,
//       props: {//         ind: {//           type: Number//         },//         nam: {//           type: String,//           require: true,//           defaut: function() {//             return {};//           }//         },//         validator: function(value) {//           return value >= 0;//         }//       }//     };
//     const components_arr = [list, item];//     components_arr.forEach(com => {//       Vue.component(com.name, com);//     });
//     var app = new Vue({//       el: "#app",//       data: {//         movies: ["流浪地球", "疯狂外星人", "夏洛特烦恼", "E.T"]//       }//     });//   </script>// </body>
复制代码


子父通信

<body>    <div id="app">      <h3>$on $emit 初级使用</h3>      <button v-on:click='demoHandler("红色")' >红色</button>      <button v-on:click='demoHandler("蓝色")' >蓝色</button>      <button v-on:click='demoHandler("粉色")' >粉色</button>      <h3>$on $emit 组件传值使用</h3>      <child @two='third' ></child>    </div>
    <script src="./vue.js"></script>    <script>            /*        this.$on(event事件名,cb) 监听当前实例上的自定义事件。事件可以由vm.$emit触发。回调函数会接收所有传入事件触发函数的额外参数。        this.$emit(event事件名,arguments)   触发当前实例上的事件。附加参数都会传给监听器回调。        父子通信使用 props        子父之间通信使用 自定义函数 $on $emit 二者需要配合使用 单独不可以使用        $emit使用在methods函数中 $on使用在created中
        $on $emit 子父组件通信过程        在子组件的template的模板中写入 @click='one' 并且在one中$emit(two)提交给在子组件上写的 @two='third' 在父级组件的methods中的third函数总执行相应的操作
      */            const child = {        name:'child',        template:`           <button @click='one' >按 钮</button>        `,        methods: {          one(){            this.$emit('two')          }        },      }

      const cpmponents_arr = [child];      cpmponents_arr.forEach((com) => {        Vue.component(com.name,com)      })      var app = new Vue({        el: "#app",        data:{          a :5        },        created() {          console.log(this.a)          var that = this          this.$on('demo',function(color){            console.log(that.a)            console.log(`点击${color}按钮`)            that.a = 55            console.log(that.a)          })        },        methods: {          demoHandler(color){            console.log('方法中的函数')            this.$emit('demo',color)          },          third(){            console.log('one => two => third')          }        },      });    </script>  </body>复制代码

注意点

  1.  在HTML文件中需要将组件写入 dom 元素中
  2. 传值需要注意值的格式 数组 字符串
  3. 连接符与加号的区分
  4. 参数的命名格式
  5. 组件名定义与注册名的大小写与驼峰的区分
  6. props 的参数可以认为是该组件的data
  7. 使用foreach进行注册操作 Vue.component(组件名,组件对象)

    const com_arr = [parent, iptNum, showNum];com_arr.forEach(com => {  Vue.component(com.name, com);});
    复制代码

  8. 组件中的data需要return 返回值
  9. 在计算属性中需要返回出最后的值


相关文章:

  • vue 配置sass、scss全局变量
  • LeetCode 28.实现strStr()(Python3)
  • CODING 缺陷管理功能正式开始公测
  • 官方解决所有 npm 全局安装权限问题
  • Dubbo底层采用Socket进行通信详解
  • 消息队列系列二(IOT中消息队列的应用)
  • js排序篇----快速排序,选择排序,冒泡排序,希尔排序
  • Service Worker
  • 《文献管理与信息分析》第五章 学习笔记
  • 一些集群操作以及问题查询
  • GraphQL学习过程应该是这样的
  • Spark -- WordCount程序
  • Java SE 12扩展Switch语句/表达式完整指南
  • java中具有继承关系的类及其对象初始化顺序
  • 和平之翼代码生成器SMEU版 4.0.0 Beta5 宝船公布
  • [NodeJS] 关于Buffer
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • HTML-表单
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript-Array类型
  • quasar-framework cnodejs社区
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 从零开始在ubuntu上搭建node开发环境
  • 翻译--Thinking in React
  • 和 || 运算
  • 技术发展面试
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 我感觉这是史上最牛的防sql注入方法类
  • 小程序开发中的那些坑
  • 自动记录MySQL慢查询快照脚本
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 回归生活:清理微信公众号
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​520就是要宠粉,你的心头书我买单
  • # 数据结构
  • #、%和$符号在OGNL表达式中经常出现
  • #DBA杂记1
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • ${factoryList }后面有空格不影响
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (分类)KNN算法- 参数调优
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (五)Python 垃圾回收机制
  • (学习日记)2024.01.09
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)菜鸟学数据库(三)——存储过程
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET构架之我见
  • .net流程开发平台的一些难点(1)
  • /boot 内存空间不够
  • @angular/cli项目构建--Dynamic.Form