学习vue的开发者都知道,父子组件的直接的通讯直接使用vue提供的props属性和emit方法。props接受来自父组件的参数,emit将子组件的参数传递给父组件。这样一来父子组件之间的参数传递就得到了解决。(之前做项目的时候看到$parent和$children也可以进行父子组件和兄弟之间的参数传递,但是不提倡,原因在于如果组件想要替换位置就有问题)。
那么问题来了,兄弟组件如何进行通讯?有哪些方法
1、vuex全局状态管理
2、bus总线机制/发布订阅者模式/观察者模式
两者相比较,前者适用于大型项目的开发,如果项目业务没那么复杂,推荐使用bus来进行解决这类问题。
二、vue-bus如何使用?
第一步:使用npm install vue-bus --save
第二步:在mainjs进行全局注册
第三步:在一个页面引用两个兄弟组件
第四步:使用emit进行参数传递
第五步:在created或mounted生命周期钩子,执行事件监听。最后记得将触发的事件销毁,不然会出现点击多次触发的情况。
三、bus总线机制/发布订阅者模式/观察者模式
比如有一个bus对象(中央事件总线),这个对象上有两个方法,一个是on(监听,也就是订阅),一个是emit(触发,也就是发布),就好比我们订阅报纸,到报社去付钱,才知道你要订阅的。
观察者模式是用来监听数据变化,改变视图层。
有什么解释的不好的,希望帮我指正,万分感谢。
对你有帮助的给个赞在 Vuejs 中使用第三方库的方式有:
1全局变量
在项目中添加第三方库的最简单方式是讲其作为一个全局变量, 挂载到 window 对象上:
entryjs
window_ = require('lodash');
MyComponentvue
export default {
created() {
consolelog(_isEmpty() 'Lodash everywhere!' : 'Uh oh');
}
}
这种方式不适合于服务端渲染, 因为服务端没有 window 对象, 是 undefined, 当试图去访问属性时会报错
2在每个文件中引入
另一个简单的方式是在每一个需要该库的文件中导入:
MyComponentvue
import _ from 'lodash';
export default {
created() {
consolelog(_isEmpty() 'Lodash is available here!' : 'Uh oh');
}
}
这种方式是允许的, 但是比较繁琐, 并且带来的问题是: 你必须记住在哪些文件引用了该库, 如果项目不再依赖这个库时, 得去找到每一个引用该库的文件并删除该库的引用 如果构建工具没设置正确, 可能导致该库的多份拷贝被引用
3优雅的方式
在 Vuejs 项目中使用 JavaScript 库的一个优雅方式是讲其代理到 Vue 的原型对象上去 按照这种方式, 我们引入 Moment 库:
entryjs
import moment from 'moment';
ObjectdefineProperty(Vueprototype, '$moment', { value: moment });
由于所有的组件都会从 Vue 的原型对象上继承它们的方法, 因此在所有组件/实例中都可以通过 this$moment: 的方式访问 Moment 而不需要定义全局变量或者手动的引入
MyNewComponentvue
export default {
created() {
consolelog('The time is ' this$moment()format("HH:mm"));
}
}1在components下新建一个RemoteSearchvue文件(或者新建一个文件夹,命名RemoteSearch,下面加入一个indexvue文件)(命名都是自己随意的)
2RemoteSearchvue文件内容如下
3使用
在 Vue2 中,异步组件和路由懒加载处理使用 import 就可以很轻松实现。但是在 Vue 3x 中异步组件的使用与 Vue 2x 完全不同了。本文就详细讲讲 vue3 中 异步组件 和 路由懒加载 的实现。
所以,下面的异步组件声明:
等价于:
Vue 3x的异步组件加载函数将不再接收 resolve 和 reject ,而且必须始终返回 Promise 。也就是说,工厂函数接收 resolve 回调的方式定义异步组件在 Vue 3x 不能使用了。
提示: 如果是用 vite 工具来构建项目,在本地开发使用 import 做 路由懒加载 ,可以正常加载,但是会报警告;打包到 生产环境 会报错,页面不会正常展示,可以使用以下两种方法来实现。
欢迎访问: 个人博客地址
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)