范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

vueVue脚手架消息订阅与发布

  今天的内容有意思了,朋友们继续对我们之前的案例完善,是这样的我们之前是不是靠props来完成父给子,子给父之间传数据,其实父给子最好的方法就是props但是自给父就不是了,并且今天学下来,不仅如此,组件间任何层级的关系我都可以传数据了,兄弟之间,爷孙之间等等等等 七.浏览器本地存储1.localStorage
  关闭浏览器数据不会丢失
  通过它上面的一个api可以存储数据 .setitem()两个参数,前面是键,后面是值,要注意的是都要以加引号以字符串形式进行存储,而且就算你不加引号,最终呈现效果也会强制给你调用toString这个方法
  可以看到就算是字符串也变成了字符串类型,那么问题就来了,那如果我传入的是一个对象,也被强制调用了toString那我对象就没了,什么也看不到了
  所以如果是要存储对象数据的时候需要将对象用转为json数据在进行存储,我们都知道json本质上还是一个字符串
  剩下还有三个api:读取getitem()、删除removeitem()、清空clear()这个不用传数据
  注意:读取没有的属性,将会显示null 2.sessionStorage
  浏览器一关就没有数据了
  他的api跟local一样 3.TodoList案例完善
  我们刚才做的案例数据在一刷新,就会回到初始案例,显然这样是不行的,每个人都应该有属于自己的数据,就可以配合localstorage来,通过监视属性来做,监视我们的data数据,当一发生变动就让最新的值setitem到我们的本地存储
  我在这里卡了半天啊,我一直在纠结,为什么这个local里面的属性名会给我变成个数组,最终查到了,原来watch监视属性里面的参数本身就是个数组,放的对象的形式,做到这一步当我们敲击回车,已经可以看到localstorage将我们的数据存储下来了,但是呢我们的页面还没有,这个时候需要将我们原来的数据,注意datas本身是一个数组这里就不用再用数组包裹了
  这个时候我们我们刷新就能看到我们之前已经添加过的数据了
  bug:当我们把local清空准备重新试一下,就会报错
  不能够读取null的长度差不多是这个意思,哪里来的null?还记得前面说过当我们本地存储如果读取的是一个不存在的属性那他读取出来就是null,所以问题出现在这里,这个时候localstorage里面还没有这个属性的,主需要采用短路运算,让原始数据,存在就用它否则就为一个空数组
  bug:虽然完成了刷新添加的数据不会丢失,但是我们的选择刷新了会丢失,为什么,问题出现在watch这里,我们对watch的监视只是看dataArr有没有整体改动,用了unshift,vue都能检测到,很明显这是一个能够改变自身的方法,但是我们去勾选前面的选择,却是深层次里面的了,所以监视的deep属性就来,只有监测到深层次的改动才又会重新setitem 八.自定义事件方法一 : @或者v-on方法完成一个案例,当我们点击一个子组件,会把子组件的名字传到app里面来并打印出来,用到props的子传父方法,怎么用自定义事件来完成这件事情,首先在app的组件标签写上我们的自定义事件名,用v-on来绑定,
  那么这个事件怎么来触发呢,这样来理解,当我们通过组件标签给她绑定了一个自定义事件,那么此时这个组件实例对象vc身上肯定已经有这个事件了,至于怎么来触发就需要回到我们的组件里面去定义
  这里先把我们的触发后的事件处理函数定义好,然后关键逻辑 主要是在我们要触发的这个组件里面,想要这个自定义事件要怎么触发其实是听你自己的,同样还是需要在这边生命一个内置的事件,然后在这个事件函数里面用到一个api  $emit ,他的第一个参数就是你的自定义的事件的名字,第二个参数可以传参给你自定义事件的处理函数
  props和自定义事件异同点:
  共同:都可以实现子给父传数据,而且都是通过父组件里面的回调来实现的
  不同点:props需要接收,而这种方法,直接拿来用都不用调用这个函数,props还需要自己去调用这个函数把参数传进去 方法二: 针对于上面的自定义事件的形式,我们还有第二种方法也叫做 ref法,通过在app给子组件添加一个ref,前面就说过我们用ref获取来的组件是这个组建的实例对象,有了实例对象,直接通过mounted这个生命周期钩子,为什么要在这里做,因为只有挂载完毕了我们才能拿到这个实例对象,vue才会new 组件构造函数,继续通过$on这个方法给这个实例对象在他身上添加一个自定义事件
  做到这一步,我们组件里面的代码不变,还是click同时还是通过$emit 这个api来触发自定义事件,做到这一步意思就是,一切准备就绪,一旦在这个组件触发了这个自定义事件就会执行自定义事件的回调函数,那么回到函数呢?直接在后面以参数的形式添加
  如果说我只想执行一次用v-on方法就是直接用事件修饰符,用ref方法,就调用$once这个api
  注意如果是子组件多个参数传进来,可以使用这种方式将其以一个数组方式接受
  8.1解绑自定义事件解绑单个事件,写在子组件里面,全新api $off
  解绑多个,用字符串包裹
  解绑所有,this.$off()不传参数 回顾前面所说的一个生命周期的问题,说过当执行了destroy之后,身上的事件、监听器等都会被销毁,但是说的事件是自定义事件,和vue事件不包括原生js事件,比如你点击一个按钮n++,这个时候n肯定不加了,但是如果你写的有console.log那么这个log肯定还是你点一次输出一次的,自定义事件就更不用说了,也是vue实现的,所以也会被销毁实现不了了,还有一个点就是,vm被销毁了他下面的子组件的这些自定义事件等也会被销毁 8.2注意是一种组件间的通信方式,适用于  子组件给父组件传 我们的组件标签上也可以绑定内置事件,但是需要 .native这个修饰符,绑定后比如一个click那就是这个子组件的最大的p可以触发也就是子组件的最外层 如果用下面这钟方式绑定自定义事件的时候,需要注意回调这里要么写在mtehods里面,要么写成一个箭头函数,不然this指向会变
  8.3TodoList自定义事件
  将之前这个案例子传父数据的地方都改成自定义事件,我就直接传几个,比如敲回车放入数组这里直接将原来的动态绑定改为自定义事件,简写形式
  然后我们header这边的 props就可以删除了,同时在我们的键盘事件添加上调用api去触发自定义事件的命令
  然后我们在用ref打标识的方法再做一次全选的方式,首先需要在app里面找到footer的子组件,给她打一个标识,然后在我们app这个组建的mounted函数里面来通过ref得到这个组件实例对象通过on这个api将自定义事件绑定上去,同时第二个参数为我们要调用这个事件的回调函数
  然后后面基本是一样的,在我们子组件里面这个自定义事件该怎么触发,就写内置事件,写一个事件处理函数,然后在这个处理函数里面,emit这个api来触发自定义事件,同时将我们需要的参数传过来
  九.全局事件总线9.1安装全局事件总线
  可实现任意组件间的通信
  其实原理是这样的,我们左边这么多组件,要实现任意互相通信,可以由一个中间者实现,比如我们在B里面定义这个x给她通过$on绑定一个自定义事件,同时回调在我们 B 里面,注意是在B里面,所以当执行这个自定义事件的时候,是在B里面执行,完成了这一步,比如说我们要把A的数据传到B里面来,那么A就可以通过x这个对象用他身上的$emit这个api来触发我们的自定义事件同时把A身上的数据,传过来,这个时候我们B的回调里面就能收到这个数据了。
  其实原理跟我们前面的自定义事件很像,所以这么一看,这个x是不是要满足两个特性:一个是它能够被所有组件访问到,一个是他身上要有$on、$emit等api,第一个问题它能够被所有组件访问到,放在VueComponent上实现不了,因为我们说过每个VueComponent都是一个全新的构造函数,放在自己vc上更不可能,那就只有你能访问了,那么顺着那条线,是不是答案已经出来了,没错,要让所有组件都访问得到,那就只有Vue的原型对象了
  第二个问题,怎么让他身上有这些api,这些api其实都是在vue原型对象上的,所以我们vm、vc都可访问得到,但是将它等于一个vc不太现实,因为我们是将它定义在入口文件的,那就只能为一个vm了,并且还要在vm的beforecreate这个生命周期函数来赋值,为什么要在生命周期函数里来赋值,因为这里讲究一个时间效应,太慢了不行的,前面也已经看过了ref打标识这种方法调用on这个api就是在mounted生命周期函数里面调用的,为什么因为讲mounted的时候就说过这里面是万物的开始,呱呱坠地的时候,什么定义定时器、自定义事件等等都是在这里,而且也只能在这里,不然时间晚了,我触发了你还没绑定好那怎么可以,所以说我们讲究一个时间效应,如果等到vm都定义完了,来一个x=vm,这个时候已经整个都挂载到页面上去了,我们组件里面的mounted也早已经执行完了,你的x都还没有这些api那就会报错,然后还只能写在beforecreate这个生命周期钩子,为什么,也不是说只能嘛,最好写在这里,created感觉也是可以的,因为这里数据挂载这些都还没做,但是也说过vue内置的一些事件、api之类的定义完了,我要这些就够了,我不需要数据。
  所以最终定义成这样就是最标准的了,而且我们一般x叫做$bus,因为这个东西的作用一是本身有点公交车的感觉,谁都能用,还有一个就是他的中文意思还有总线的意思
  有一点必须要清楚,我想把A发送到B,那调用emit发射这个api的就是前者并且参数是数据,而后者就调用on并且参数为回调,你就拿到这个数据了,想干嘛干嘛了
  然后就是,定义自定义事件也就是on肯定一挂载就要定义,所以写在mounted里面,而发送数据这边决定触发事件的方式
  既然用到了出生mounted,最好也在临别beforeDestroy解绑我们的事件,一定要写事件名
  9.2TODOList全局事件总线
  又可以继续完善之前的案例了,其实父给子传数据,props是最好的方法,子给父传,用我们原始方法也行(props),自定义事件也好,都差不多的,这里最需要用到全局事件总线的,是孙给爷传,之前一直靠着list这个中间量props,他自己也没用只是给item带过去函数
  定义好api
  我们是item给app传,那就在item先emit,都是传过去id进行更新我们的数据里面的completed是否勾选和筛选进行删除操作
  然后再mounted里面声明事件
  十.消息订阅与发布
  一种组件间的通信方式,适用于任意组件间通信
  如果A需要C的数据,那么A就订阅消息,C就发布消息即可
  原生JS无法轻松实现消息订阅与发布,需要第三方库(这里推荐 pubsub-js) 先安装这个库 哪里需要就在那里导入,我要把student的学生姓名传给school那他们两个都需要
  ,导入时注意 直接pubsub没有js
  学生这边发布信息,参数为要传过去的数据,用到的api pubsub.publish,第一个参数为消息名,发布与订阅都需要的
  学校这边订阅消息用到的是 pubsub.subscribe接受两个参数,第一个是我们的消息名字,所以一般取名为msgName,第二个参数才是我们传过来的数据,一般取名data,注意消息订阅同自定义事件、全局事件接收数据这边都是放在mounted函数里面的
  注意一,同样需要在beforeDestory函数里面取消订阅,用到的api .unsubscribe,但是我们这里的消息订阅有点类似于定时器,需要一个变量去接收,这边取消订阅为这个变量名,注意不是消息名
  像这样是拿不到的,都是两个作用域了,把它放到实例对象上去,作为一个属性即可
  注意二:直接在订阅消息里面写这个函数同样要写为箭头函数,不然this会乱,或者也可以在methods里面写,这里直接调用

别小瞧比亚迪,下半年几款重磅新车一旦到来,有机会够到一线门槛刚进9月,比亚迪就急戳戳公布了8月份销量,没出意外,当月数据依然能打,特别是新能源车板块,超6万辆成绩笑傲一众国产车品牌。比亚迪新能源确实很出彩儿,但总体上还是跟一线自主存在一定差比特币等虚拟货币的去中心化只是一种骗局点亮好奇心大家都知道比特币等区块链的货币,也知道区块链宣传一种去中心化。但是大家不知道,其实任何虚拟货币还是集中在少数人手中。大家经常会看到一些报道说谁是比特币的大佬,虚拟货币的大五天爆红的Loot到底是什么?又引起一波NFT浪潮最近各种关于Loot的信息刷屏,毫无征兆。社交媒体网络Vine联合创始人DomHofmann的NFT项目Lootforadventures仅用了5天时间,就吸引了4600万美元的销中国第1个万亿市值车企将诞生,新能源车大战,丰田已输掉比赛?不得了哈,中国首个万亿市值车企或将诞生,8月4日,比亚迪市值已狂飙至8815亿元,离万亿市值,只差最后的临门一脚。一个曾经被众多国人看不起的汽车品牌,为啥现在这么生猛呢?三个字新能原来2。0T只是开胃菜,纯电动大G亮相,奔驰发布EQG概念车当传统豪华品牌开始发力纯电动车型,你不会想到他们会有多彻底,G级作为一款硬派越野车,在诞生的几十年里一直都凭借优秀的可靠性和越野性能作为卖点,而在推出2。0T的版本虽然有争议,但是Iphone的刘海屏,库克的刘海头。乔帮主留下了一代传奇iphone4,然后库克又在iphone上做了什么改变呢,iphoneiphone612,库克在每一代产品都进行了或多或少的变动。比如iphone5增加了屏幕尺马斯克为什么要砸钱做机器人,将成为全球最便宜劳动力?埃隆马斯克的工业机器人,有一天会不会把人类从,令人厌烦的体力劳动中解放出来,他当然是这么想的,而且在这个过程中,这位特斯拉的超级大佬认为,他可以解决人工智能中的一些新问题,尤其是如买手机选6GB运存还是8GB?12GB到底有没有必要?手机运存是一项非常关键的配置参数,尤其是对于安卓手机而言。一般来说,手机运存越大,也就意味着手机可以同时运行更多的软件,并且不会影响到手机的流畅性。图片来源于网络如此一来,机友们或又见套捐!大量公益组织在薅羊毛?中国社会福利基金会寒了谁的心作者古原,独立经济学者1hr又见套捐。9月5日,腾讯公益拿出一亿元来配套社会组织捐赠。中国社会福利基金会旗下的中国家庭儿童预防烧烫伤干预项目的一位负责人,公然在网上发动网友套捐,打手机多久一换最合适?懂行老师傅说得很直白由于手机行业每个月基本都有新机发布,那我们很多机友也时时刻刻在遭遇着换机的诱惑。新手机的性能外观以及黑科技实在太能打了,分分钟就想让我们换掉手里的老手机。然而心有余力不足,咱们的钱开学季,适合学生党的几款手机第一款红米Note10pro月魄色康宁大猩猩保护玻璃Victus目前只在顶级旗舰小米11三星S21上使用,搭配LCD屏幕,将耐摔进行到底!67W快充5000mAh电池,42分钟充到
京东618战报18日京东超市干货食品母婴酒类全面爆发增长6月18日零点,2021京东61818周年庆步入狂欢高潮。开场3分钟,京东超市整体成交额同比增长超10倍。开场仅2分钟,干货食品成交额破3亿,母婴品类总成交额破2亿开场5分钟,酒类京东618背后,东北的种菜农户也有好生意六月的清晨,黑龙江五常市还有些凉意,一大早满清富一家人就开始忙碌收菜。满清富家的蔬菜温室大棚里,一米多高的豆角秧上,成串的油豆角已经成熟,黄瓜也沉甸甸的摇摇欲坠。新鲜的蔬菜挂着晨露2021年中国零售论坛,多点Dmall张峰论道数字零售疫情之后,万象更新,消费市场的复苏需要从源头发力。寻找新的增长引擎,不仅仅是权宜之计,也是一道必答题。对于零售行业来说,更需要明确的方向和出路。6月8日10日,零售行业年度盛会20滴滴出行招股书解读上市后没有财富自由,打工人不要想太多6月24日,滴滴出行向美国证券交易委员会更新了招股书。作为一名滴滴前员工,最近很多滴滴的前同事都会问我这样一个问题,到底手里的期权能值多少钱。其实一位员工关心自己的期权什么时候变现神州高铁2020业绩说明会天津2号线等运营,将承载4大战略升级5月21日,神州高铁召开了2020年度业绩说明会暨战略交流会。作为同花顺平台邀请的自媒体代表,本人也参与了这次神州高铁非常重视的说明会。今年神州高铁选举出的新一届的管理层,也在本次究竟谁说谎了特斯拉车主言论矛盾,蔚来否认,供应商表示没参与4月27日,特斯拉女车主维权问题尚未解决,却把蔚来和蔚来的供应商牵涉其中。针对昨日传闻特斯拉维权车主是通过蔚来供应商进入车展,蔚来参与了特斯拉车主维权事件等问题,蔚来发布声明否认。起底Boss直聘1亿砸世界杯,创始人曾是智联CEO,与拉勾势同水火你可能没用过Boss直聘,但它的热搜话题,你一定看到,甚至参与过。6月11日,Boss直聘正式登陆美股。首日股价大涨近96,市值甚至超过了智联前程无忧和猎聘市值总和。随后,Boss618商家用脚投票,选择天猫的确定性增长今年的618,电商行业早早地蓄势待发。5月底各大平台纷纷开始预热活动,新平台不断加入,让这场上半年线上电商大促活动,持续成为商家与消费者们关注的焦点。价值兄发现,今年的618,国内宁德时代目标价砍半,万亿市值锂电池龙头,下半年受制这7个风险近日,动力电池龙头宁德时代屡屡创造股价新高,今年已数次冲破历史最高位。6月4日,宁德时代股价大涨5,市值再次突破万亿大关。甚至有乐观分析,宁德时代已站稳创业板第一支万亿市值公司地位苏宁冲刺6186月16日0点起,PradaAirpods小米等冰点价6月16日0点起,苏宁易购618大促进入爆发阶段,直播会员新品补贴以旧换新超级爆款福利扎堆,让消费者一次把福利装满购物车。活动期间,苏宁易购将推出最高24期免息至高1200元以旧换618期间,18万消费者体验苏宁以旧换新,零售云新增260店6月19日凌晨,苏宁易购发布618年中大促全程战报。今年618,苏宁易购首倡共情消费,通过打造六一宝宝节和脱口秀毕业会独家综艺秀IP,触达不同群体消费者,建立消费链接关系,产生共情