IE中有很多坑,当使用VUE的时候,坑就更多了,经常遇上莫名其妙的问题还看不懂,但是项目必须兼容IE。只能解决后把自己遇到的问题记下来。
1、问题
项目已经做完了,下午的时候优化了一段代码,开开心心准备下班,顺手刷新了下IE的页面,咦,怎么卡住了,一看IE控制台,报错了,但是谷歌没报啊,好气啊,还不告诉我报错位置。
2、解决过程
我开始怀疑我最新加的一个模块代码,因为今天别的都是改改css样式,只有那里把一些全局常量提出来单独做一个模块。
let config = {
dev: { //开发环境需要的全局常量或变量
WEBSOCKET_DEVICE_URL: 'ws://172.16.1.228:8762/websocket/', // 与设备交互信息的websocket前缀
},
build: { // 测试环境需要的全局常量或变量
WEBSOCKET_DEVICE_URL: 'ws://172.161.1.152:8762/websocket/' // 与设备交互信息的websocket前缀
}
}
export default config;
main.js里面的代码
import CONFIG from './config'
Vue.prototype.myConfig = CONFIG.dev;
调用常量时的代码
websocket = new WebSocket(this.myConfig.CONFIG.WEBSOCKET_DEVICE_URL);
- 那就不写模块里好了,直接写到main.js里面去,不行,依然报错。
- 调用常量时的代码里的this.myConfig.CONFIG.WEBSOCKET_DEVICE_URL屏蔽,不报错了,于是打印值,发现可以打印出来,但是还是会报错。
console.log(this.myConfig.WEBSOCKET_DEVICE_URL);
this.GOLBAL.websocket = new WebSocket(this.myConfig.WEBSOCKET_DEVICE_URL + deviceNumArr.join(','));
- 先声明myConfig,并给与属性值,再复制config的属性值给Vue.prototype.myConfig,问题解决(但是这样写的话我就不如直接在Myconfig里里赋值了,复制还多此一举)。
import CONFIG from './config'
Vue.prototype.myConfig = {
WEBSOCKET_DEVICE_URL: ''
};
Vue.prototype.myConfig.WEBSOCKET_DEVICE_URL = CONFIG.dev.WEBSOCKET_DEVICE_URL;
3、结论
在给Vue.prototype添加新属性的类型为对象时,最好先声明该对象的每一个属性。