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组件间的通信(组件传值)

一.定义

? ? ? ?vue组件之间的通信(传递数据)是必然的,依据vue组件之间的关系(父子、兄弟以及无关组件)会有不同的做法。

二.分类?

  • 父子组件:父--->子:props,refs? ? 子--->父:事件(tips:上个blog有说到)

????????注:父组件给子组件传值也叫正向传值,反之则为逆向传值。

????????1)父给子组件:refs(tips:props上个blog有说到)

????????用标签的方式使用组件(eg:<my-com/>),实际就是创建了组件对象。只要拿到组件对象,那么组件对象里的methods就可以使用。refs是vue中获取dom的一种方式,dom也是标签,标签就是组件对象。拿到了dom,就相当于拿到了组件对象(这句话需要细细品味吆~)

? ? ? ? 如果某个元素使用ref属性,那么在vue对象里,就可以用$this.refs访问。可以认为就是给元素增加了id属性,在vue中就可以操作该dom了。

格式:

?<p ref = "pId"> {{msg}}</p>

?methods:{
? ? ?testf:function(){
? ? ? ??? ?this.$refs.pId.innerHTML = "hi";
? ? ?}

}

?
let myCom = {
    template:`
        <div>            
        </div>
    `,
    data(){
        return {

        }
    },
    methods:{
        focusFn(str){
            console.log(str);
        }
    }
}

Vue.component("my-com",myCom);

new Vue({
    el:"#app",
    data:{
        msg:"hi"
    },
    methods:{
        fn(){
            this.$refs.comId.focusFn(this.msg);//focusFn()是子组件里的函数。
        }
    }
});

?
  • ?兄弟组件

????????1)事件总线

? ? ? ? vue-bus实质就是创建一个vue实例,通过一个空的vue实例作为桥梁实现vue组件间的通信。它是实现非父子组件通信的一种解决方案。

步骤:

  1. 单独new一个Vue空对象: ?let bus= new Vue();
  2. 在组件A里,绑定一个自定义事件(相当于定义了一个自定义事件):
    ?? ? ? ?bus.$on('eclick',target => {
    ? ? ? ?   console.log(target) 
    ? ? ? ? })
  3. 在组件B里,触发事件
    ? ? ? bus.$emit('eclick',"b传给a的");

eg: 组件myCom2给组件myCom1传值,则myCom1绑定事件,组件myCom2触发事件。

// 定义一个vue对象(作为事件总线的对象)
let bus = new Vue();

let myCom1 = {
    template:`
        <div>
            <hr>
            组件com1
            <hr>
        </div>
    `,
    created(){
        // 注册了一个事件
        bus.$on("eclick",(target)=>{
            console.log(target);
        });        
    }
}

let myCom2 = {
    template:`
        <div>
            <input type="button" value="  传 " @click="fn" />
        </div>
    `,
    methods:{
        fn(){
            //触发事件
            bus.$emit("eclick","hello");
        }
    }
}

Vue.component("my-com1",myCom1);
Vue.component("my-com2",myCom2);

new Vue({
    el:"#app"
});
  • 集中管理($root)

????????把数据存到根实例的data选项,其他组件直接修改或者使用。

定义:

new Vue({
? data:{a:1}
})

使用:

//子组件内部
this // 子组件本身
this.$root // vm 根实例
this.xx //组件内部数据
this.$root.a //根实例数据?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:09:16  更:2021-08-09 10:11:21 
 
开发: 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年11日历 -2024/11/23 4:31:31-

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