TypeError: Cannot read property ‘publish’ of undefined"
VUE项目启动之后相应的事件没反应,进入浏览器开发者模式发现报错信息,根据错误信息会定位到指定的vue页面中,发现是在在页面中使用PubSub.publish(“brandId”, val);报错的原因是推测是这个PubSub这块引起的。
1.PubSub简单介绍
当用户按下一个按键时,需要做的事情有很多: 新字符显示到屏幕上;插入点向后移动;将本次动作加入到撤销的历史记录中; 保持与服务器同步;拼写错误检查;统计字数和页数等等。
按照传统的做法,假如我们监听 keypress 事件,并在一个处理中完成所有的任务,这想想都觉得可怕了。 那么有没有什么方法可以更好的解决这个问题,答案就是分布式事件。
PubSub 模式,是 Publish/Subscribe 的缩写,意为“发布/订阅”模式。
2.问题定位确认
vue项目下找到package.json文件,找到dependencies属性,查看pubsub-js的版本,(时间不一样最新版本可能不一样)默认下载的是最新版本1.9.0版本,如下图
引用的地方如下:
版本没问题,引用没问题,为什么会报错说找不到那?
我在重新安装一遍,操作猛如虎
npm install pubsub-js --save
问题就出现在这里:
使用 npm install pubsub-js --save 命令下载的是当前pubsub-js的的最新版本1.9.0,不支持这种写法(为啥行不知道)。
使用 npm install pubsub-js@1.8.0 --save 命令下载的是1.8.0的版本,在下载的时候指定好版本号。
1.8.0版本支持发布(publish)和订阅(subscribe)函数。
切换版本之后,先引入相应的组件,去掉this.直接写引入之后的名称PubSub。vue真的不是很懂,这版本之间还有这么大的影响,emmmm