IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue中组件间通信 -> 正文阅读

[JavaScript知识库]Vue中组件间通信

父子组件间通信的方式:

  1. props 父组件向子组件传递数据
  2. $emit 自定义事件(子组件向父组件传值)
  3. slot 插槽分发内容 (父组件向子组件传递标签和数据

Props

在子组件中定义props

三种方式:

方式一:指定传递属性名,注意是数组形式

props:['id','name','salary','hobby']

?方式二:指定传递属性名和数据类型,注意是对象形式

props:{
    id:Number,
    name:String,
    salary:Number,
    hobby:String,
    setName:Function
}

?方式三:指定属性名、数据类型、必要性、默认值

props:{
    name:{
        type:String,
        required:true,
        default:'默认值'
    }
}
//子组件:
window.Dashboard = {
        template,
        props: ['aa']//指定要aa这个数据
    }
//使用:
<div class="col-xs-6 col-sm-3 placeholder" v-for='(item,index) in aa' :key='index'>
 <h4>{{item}}</h4>

//父组件:
data() {
      return {
         hobbies: ['smoke', 'drunk', 'curl', 'sleep']
            } }
  <dashboard v-bind:aa='hobbies'></dashboard>//父组件中通过v-bind方式绑定aa 给aa赋值

传递操作 数据在哪 操作定义在哪? 触发操作写在了孙组件

  // 父组件中:
<home-list :student='student' :deleteS='deleteS'></home-list>
  deleteS(index) {
                this.student.splice(index, 1)
            }
//子组件:
 <item  v-for='(el,index) in student'  :el='el' :deleteS='deleteS' :index='index'></item>
  props: {
            student: Array,
            deleteS: Function
        }
//孙组件:
<td><a href="#" @click='deleteItem'>删除</a> </td>
 props: {   deleteS: Function,
            index: Number }
methods: {deleteItem() {
                this.deleteS(this.index)
            } }

$emit 自定义事件(子组件向父组件传值)通信此种方式隔代组件或兄弟组件间不合适

//子组件:
<a?href='#'?@click='deleteH(index)'>删除</a>

??? methods:?{

???deleteH(index)?{

??????//第一个参数为自定义事件名称,第二个参数为传递参数

?????????????this.$emit('delete_hobby',?index)?}}

//父组件:
<dashboard??@delete_hobby="deleteHobby"></dashboard>

?????? methods:?{?deleteHobby(index)?{

????????????????this.hobbies.splice(index,?1);?}}

slot 插槽分发内容 (父组件向子组件传递标签和数据)

//子组件apphome中:
<slot?name='dashboard'>?</slot>

//父组件app中?
          <app-home>

??????????? <h1?slot='dashboard'>仪表盘</h1>

?????????</app-home>

?PubSubJS 库来实现非父子组件之间的通信:使用 PubSubJS 的消息发布与订阅模式,来进行数据的传递。

订阅信息 ==== 绑定事件监听 ,发布消息 ==== 触发事件

?注意: 但是必须先执行订阅事件 subscribe ,然后才能 publish 发布事件。

//兄弟组件appleft:在钩子函数中订阅消息

?created()?{//自动调用 第一个参数是订阅事件的名称,第二个是回调函数(event是事件名称:change,data是接收发布时传递的数据:1)

????????????PubSub.subscribe('change',?(event,?data)?=>?{

?????????????????????this.delnum?+=?data})?}

//兄弟组件apphome:

?deleteHobby(index)?{

????????????????this.hobbies.splice(index,?1);

????????????????//删除成功之后发布消息告诉appleft组件

????????????????PubSub.publish('change',?1)

????????????}

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 07:38:44  更:2021-07-28 07:39:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 4:17:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码