首页 技术 正文
技术 2022年11月17日
0 收藏 773 点赞 2,958 浏览 1754 个字

最近几天忙着写Api去了,抽空把后面的内容下出来,然后再分享给大家web可以使用的api。

上次说了父子组件直接的传值,这次看一下非父子组件之间的传值(总线机制)

要实现非父子组件之间的传值非常重要的一行代码如下

Vue.prototype.young=new Vue();//在Vue实例上挂载一个为young的属性(指向Vue实例),当然young使随便取的。

先创建一个基础框架

<body>
<div id="app">
<hello message="YoungAm"></hello>
<hello message="Hi boy"></hello>
</div>
</body>
<script>
Vue.prototype.young=new Vue();//在Vue实例上挂载一个为young的属性(指向Vue实例) Vue.component("hello",{
template:'<div>{{message}}</div>',
props:['message']
}) var app=new Vue({
el:'#app'
})
</script>

显示效果如下:

组件基础(非父子组件传值)—Vue学习笔记

现在我们需要实现点击一个名字,让另一个的内容变为点击的内容。

前面我们给Vue.prototype挂载了一个young现在我们通过这个young来实现非父子组件之间的传值。

给组件一个点击事件,通过添加的young来实现向上传递事件‘change’并把当前组件的message值传出去。

mounted为Vue自带的生命周期钩子,当组件被挂载时执行。

this.young.$on()用来监听事件,这里接受的是组件传出来的change。

由于执行change事件时this的作用域发生了改变,

所以我们需要在还未改变时给他一个备份。var _this=this;

最后赋值就行了。

<script>
Vue.prototype.young=new Vue();//在Vue实例上挂载一个为young的属性(指向Vue实例) Vue.component("hello",{
template:'<div @click="handleClick">{{message}}</div>',
props:['message'],
methods:{
handleClick:function(){
this.young.$emit('change',this.message);//向外触发事件
}
},
mounted:function(){//当组件被挂载时执行
var _this=this;//this作用域发生改变,此处进行存储为改变的this
this.young.$on('change',function (ms) {
_this.message=ms;
})//监听事件
}
}) var app=new Vue({
el:'#app'
})
</script>

测试结果:

组件基础(非父子组件传值)—Vue学习笔记

提醒:如果你为开发板会发现这样一个警告!

组件基础(非父子组件传值)—Vue学习笔记

这是由于Vue机制引起的。

Vue中规定子组件不得改变父组件的值。

所以我们可以改写成这样。

<script>
Vue.prototype.young=new Vue();//在Vue实例上挂载一个为young的属性(指向Vue实例) Vue.component("hello",{
data:function(){
return {selfMessage:this.message}
},
template:'<div @click="handleClick">{{selfMessage}}</div>',
props:['message'],
methods:{
handleClick:function(){
this.young.$emit('change',this.selfMessage);//向外触发事件
}
},
mounted:function(){//当组件被挂载时执行
var _this=this;//this作用域发生改变,此处进行存储为改变的this
this.young.$on('change',function (ms) {
_this.selfMessage=ms;
})//监听事件
}
}) var app=new Vue({
el:'#app'
})
</script>

好了,非父子组件的传值就是这样,示例简单,大家可自行练习。

再见,一梦一黄粱。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,133
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297