问题描述:
在使用uniapp框架开发微信小程序时,有时候会遇到Vue.prototype里放的值无法在小程序里获取的问题,这是因为uniapp的小程序使用的是微信原生小程序的组件库,因此Vue.prototype的值无法直接引入到小程序里。但是我们可以通过一些方法绕过这个问题。
解决方法:
- 在uniapp中引入wx对象,使用wx.$vm来代替Vue.prototype
示例代码:
在主入口文件main.js中添加以下代码:
import Vue from 'vue'
import App from './App'
Vue.prototype.$eventHub = new Vue()
wx.$vm = new Vue({
el: '#app',
render: h => h(App)
})
在vue组件中可以这样使用:
this.$eventHub.$off(eventName, callback)
替换为:
wx.$vm.$emit(eventName, args)
- 在uniapp中使用$dispatch和$broadcast来代替Vue.prototype的实现方式
示例代码:
可以在Vue组件中使用$emit来触发布局组件通过$on绑定好的事件或者通过$dispatch向所有的祖先组件广播一个事件
在使用过程中可以结合使用$broadcast和$dispatch来实现事件的传递。可以在主入口文件main.js中写一个空的Vue实例,用它来保存事件的派发在监听。如下代码:
import Vue from 'vue'
Vue.prototype.$bus = new Vue()
在其他的Vue组件中,可以通过$dispatch来派发事件,如下代码:
mounted() {
this.$dispatch('sendMessage', params)
}
而在父组件中,可以通过$on来监听事件,如下代码:
export default {
mounted() {
this.$bus.$on('sendMessage', params => {
// do something
})
}
}
通过$dispatch和$broadcast来实现组件之间的事件传输,可以更好的兼容小程序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:uniapp微信小程序无法获取Vue.prototype值的解决方法 - Python技术站