IE11下处理Promise及Vue的单项数据流问题


Posted in Javascript onJuly 24, 2019

最近我开发的公司的竞赛网站被发现在IE11下排行榜无数据,但是在其他浏览器没问题,我然后打开控制台一看,发现了如下错误:

IE11下处理Promise及Vue的单项数据流问题

真是醉了,然后发现有三个可行的方案:

直接采用 polyfill

在index.html中

<script src = "https://cdn.polyfill.io/v2/polyfill.min.js"></script> 
或 <script type="text/javascript" src ="https://cdn.polyfill.io/v2/polyfill.min.js?features=es6"></script>

手写 js 脚本判断一下

<script type="text/javascript">
 function isIE() {
  if (!!window.ActiveXObject || "ActiveXObject" in window) {
  return true;
 } else {
 return false;
 }
}
if (isIE()) {
 var script = document.createElement('script');
 script.type = 'text/javaScript';
  script.src = 'js/bluebird.min.js'; // bluebird 文件地址
  // http://cdn.jsdelivr.net/bluebird/3.5.0/bluebird.min.js
 document.getElementsByTagName('head')[0].appendChild(script);
}

</script>

安装新的依赖

1、npm install --save babel-polyfill

2、在main.js文件的顶部引入 import "babel-polyfill"

3、在build目录下webpack.config.js文件设置入口改为如下
(如果你的项目用的是脚手架,在在build目录下webpack.base.config.js文件更改入口)

model.exports={
entry:{
 app: ["babel-polyfill",'./src/main.js']
 }

Vue 提倡的单项数据流

在写 vue 组件的过程中,经常会遇到这样的情形:子组件需要的参数以 props 属性里面的 prop 来获得,父组件通过具名的 prop 来把子组件需要的内容传递给子组件,而且 Vue 提倡数据流的方向只能由父组件流向子组件。当父组件的数据发生变化时去通知子组件更改相应的属性,而不能反过来,子组件的变化影响到父组件,这种行为是被禁止的,因为这样会导致数据混乱不易于定位错误。

虽然经常写着写着子组件就想图省事,子组件直接去改变父组件的状态了,但是会报错如下:

IE11下处理Promise及Vue的单项数据流问题

那么,子组件为了更改父组件的状态, Vue 提供了两种常见的解决办法:

通过 data 中的变量将需要的 prop 初始化

props: ['initialCounter'],
data: function () {
 return {
 counter: this.initialCounter
 }
}

使用需要处理的 prop 来定义一个计算属性 computed

props: ['size'],
computed: {
 normalizedSize: function () {
 return this.size.trim().toLowerCase()
 }
}

当然子组件要想和父组件去进行通信,也可以简单的采用如下方式

$emit 触发事件,父组件接受子组件发布的事件,然后就顺理成章的在父组件里面修改自身的变量了。
关于node中的 module.exports 、 exports 和ES6中的 export 、 export default

node 中,每个文件都被视为一个独立的模块,对外只暴露一个接口(其实就是一个对象): module.exports

module 代表当前模块,它的 exports 属性负责与外界进行交流,加载一个外来的模块就是加载该模块的 module.exports 属性的内容。

// add.js
var temp = 1;
var addNumber = function (value) {
 return value + 1;
};
module.exports.temp = temp;
module.exports.addNumber = addNumber;
// 另一个js文件引用了add.js
var add = require('./add.js') 
console.log('add is', add) // add is { temp: 1, addNumber: [Function: addNumber] }
console.log(add.temp) // 1
console.log(add.addNumber(1)) // 2

通常为了方便,每个 node 模块头部有默认的一句话: var exports = module.exports

为了方便可以直接在 exports 对象上加方法,也可以实现对外的改变,但是不可以将 exports 变量指向其它变量,一旦这样做了会切断 exports 和 module.exports 之间的联系。

但是, node 采用了 CommonJs 规范, ES6 采用新规范 import 和 export (对应于 require 和 exports )

//ES6 example.js
var temp = 'temp'
export {temp} //同样的,export出来的只是一个接口,必须有大括号,除非使用下面介绍的export default
//export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。通俗来讲,不能使固定的值,应该是一个变量或者一个函数
// use example
import {example} from './example.js'
console.log(example.temp) // 'temp'
// 同样的,ES6也有默认的export写法
export default var temp = 'new'

总结

以上所述是小编给大家介绍的IE11下处理Promise及Vue的单项数据流,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JavaScript入门教程(3) js面向对象
Jan 31 Javascript
jQuery 使用手册(六)
Sep 23 Javascript
js取float型小数点后两位数的方法
Jan 18 Javascript
JS实现自定义简单网页软键盘效果代码
Nov 05 Javascript
浅谈Angular中ngModel的$render
Oct 24 Javascript
JS中正则表达式全局匹配模式 /g用法详解
Apr 01 Javascript
利用forever和pm2部署node.js项目过程
May 10 Javascript
BootStrap入门学习第一篇
Aug 28 Javascript
layui实现数据分页功能
Jul 27 Javascript
VUEX-action可以修改state吗
Nov 19 Javascript
JavaScript 几种循环方式以及模块化的总结
Sep 03 Javascript
使用Vant完成通知栏Notify的提示操作
Nov 11 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
Jul 23 #Javascript
详解Vue中的基本语法和常用指令
Jul 23 #Javascript
js如何获取访问IP、地区、当前操作浏览器
Jul 23 #Javascript
node.js express框架简介与实现
Jul 23 #Javascript
js微信分享接口调用详解
Jul 23 #Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
Jul 23 #Javascript
vue 地区选择器v-distpicker的常用功能
Jul 23 #Javascript
You might like
zend framework多模块多布局配置
2011/02/26 PHP
php数据库备份还原类分享
2014/03/20 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
vue.js中$watch的用法示例
2016/10/04 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
python调用windows api锁定计算机示例
2014/04/17 Python
Python中关键字is与==的区别简述
2014/07/31 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
python pycurl验证basic和digest认证的方法
2018/05/02 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
用Python实现最速下降法求极值的方法
2019/07/10 Python
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
高中生自我鉴定范文
2013/10/30 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
积极贯彻学习两会精神总结
2014/03/17 职场文书
委托书怎样写
2014/08/30 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android