【基础教程】VUE组件版本迁移升级指南
本文将帮助BI组件开发人员将通过vbi.package.vue.creat创建的老版Vue组件迁移升级为新版Vue组件。新版Vue组件解决了老版存在的多种问题,同时为组件开发人员提供近似于Vue 单文件组件的开发体验。如果读者在开发BI组件时遇到了组件插槽渲染不正常、子组件props传参异常等问题,则建议通过该指南将相关组件都迁移为新版组件,因为老版组件无法避免类似问题的产生,同时新版组件也有有更好的开发体验。
新版vue组件介绍
API支持情况
新版对vue组件进行了更全面支持和兼容,它支持 vue 组件选项式API中的下列API:
选项/数据
data、computed、methods、watch选项/生命周期钩子
beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestory、destoryed选项/资源
components实例 property
vm.$data、vm.$props、vm.$el、vm.$options、vm.$parent、vm.$root、vm.$children、vm.$slots、vm.$scopedSlots、vm.$refs、vm.$isServer、vm.$attrs、vm.$listeners实例方法/数据
vm.$watch、vm.$set、vm.$delete实例方法/事件
vm.$on、vm.$off、vm.$once、vm.$emit实例方法/生命周期
vm.$forceUpdate、vm.$nextTick
注意:上诉之外的API则暂不受支持。
vue组件脚本结构
新版vue组件脚本结构于vue选项式单文件组件的脚本结构类似,对有vue组件开发经验的开发者应该非常熟悉:
return {
//组件命名定义
name: {
value: 'com-empty-template',
CN: '空模版',
// 声明组件为vue组件
type: 'vue',
},
// 子组件注册
components: {
'yj-suo-module-container': 'd8d704cd5e7341f3b957457b2f5add1f',
},
// data函数
data() {
return {
title: {
title: '我是标题',
},
};
},
// 受支持的生命周期钩子函数
// beforeCrate、beforeMount等等
created() {},
mounted() {
console.log('父组件 init =============>', performance.now());
},
// 组件的事件函数
// 支持method 或 methods
method: {
NFDW: function () {},
btnClick: function () {
alert('点击按钮事件');
},
click: function () {
//组件内部任意DOM点击产生的事件
},
onClick() {
this.title.title = Math.random() * 100;
},
onInit() {
debugger;
},
},
// 组件属性定义
// 等同于 vue 组件的 props 定义
custom: {
content_list: {
name: '自定结构',
type: 'json',
value: {
list: ['text1', 'text2', 'text3', 'text4'],
},
isHide: false,
group: '组件属性',
},
},
};
需要注意的是,BI组件通过custom定义组件属性,它的作用类似于vue组件的props。当组件作为子组件进行使用时,在父组件中为其传参也是通过custom中定义的属性名称进行模板传参绑定。同时在组件内访问组件的属性值时应该始终通过 propName.value 来访问它的值。
组件迁移
选择需要迁移的组件,打开BI组件编辑器,按下列步骤进行迁移升级。
组件类型
在组件命名定义中将组件类型设置为 vue,如下:
name: {
value: 'com-empty-template',
CN: '空模版',
type: 'vue',
}
这就表示该组件为vue框架开发组件,BI运行时将自动创建vue组件实例。
通过该类型标记后,开发者无需在
init事件函数中通过调用vbi.package.vue.creat来创建vue组件。
组件脚本
组件初始化迁移
老版vue组件,需要开发者在BI运行时组件框架调用 init 是事件函数时显式调用 vbi.package.vue.creat 来创建vue组件。新版组件不再需要开发者显示调用,只需开发者通过组件命名定义,声明组件为 vue 类型组件。
因此开发者在迁移时,首先应该移除组件的 init 事件函数,并将初始化逻辑脚本代码相应的迁移到组件的 created、mounted 生命周期钩子函数中。
组件选项
将 vbi.package.vue.creat 参数中用到的各种vu选项参数(mounted、created、computed、methods等)复制到组件脚本结构中对应的位置。
在复制 methods 时要注意,如果组件脚本结构中已经包含了 method 定义了,则应该将它们合并在一起并仅留其一。
组件模板
将组件模板中原有的 $com.method.funcName 来访问组件事件函数的全部改为 funcName。新版vue组件支持直接调用,而不需要通过之前的代理访问。
补充说明
custom和props
在BI组件中通过custom声明类似于props的组件属性。
- 当组件作为子组件进行使用时,在父组件中为其传参是通过
custom中定义的属性名称进行模板传参绑定。
例如:<my-component :prop-name="someLocalField">
注意单词间短横线连接
- 在组件内访问组件的属性值时应该始终通过
propName.value来访问它的值,包括在组件模板和组件脚本中。
emit 和 模板事件绑定
在BI组件中需要进行父子组件间通信时,子组件内对methods或method定义的任意事件函数进行调用时,BI组件框架将自动 emit 对应事件函数名称的事件,该事件函数的返回值将作为emit的参数。
例如:
在子组件的 methods 中下列一个事件函数定义:
methods:{
someFunc(){
return 1
}
当子组件对该函数进行调用时,在调用成功后BI组件框架将自动执行 this.$emit('someFunc',1) 。
在父组件进行事件回调绑定时:<my-component @some-func="someLocalCallback">
注意单词间短横线连接
相关推荐
vue elementUI 使用slot-scope报错(版本升级)
vue里面使用element-ui表格组件时候报错 slot-scope未定义。 原创文章 20获赞 9访问量 7105 关注 私信 展开阅读全文 作者:hi 宋
vue项目查看vue版本及cli版本的实现方式
查看cli版本,执行如下: vue -V 查看vue版本 npm list vue 补充知识:vue老项目升级vue-cli3.0问题总结 升级步骤 1、 删除原vue-cli并安装vue-cli3.0 2、删除新项目中src下的内容,把原项目中src目录覆盖到新项目中 3、把router从目录文件夹改为文件,src/router/index.js提高一层变成src/router.js 4、 我的项目中src已经分为了views和components所以无需修改,如果不是这个结构需要自己区分下 5、将原项目的index.html及favicon.ico覆盖到新项目的public中 6、
flask-vuejs-template:Flask + Vue JS模板
Flask-VueJs-Template :hot_pepper: :victory_hand: Flask + Vue.js Web应用程序模板 产品特点 最小烧瓶1.0应用 API具有基于类的安全资源路由 入门级测试套件 +纱 用于后端通信 Vue样本 一键部署+ Gunicorn的Heroku配置 演示版 备择方案 如果此设置不是您想要的设置,那么这里有一些类似的项目: 旧模板 该模板已更新为使用更扁平的文件夹结构,并使用yarn代替npm。 现在,您可以从模板根目录中运行yarn serve以及其他yarn命令。 旧模板将保留在但不会被维护。 Django的 更喜欢Django? 签出 模板结构 该模板使用Flask
vuejs官方离线中文文档
这是cn.vuejs.org 官网文档的同步版本,本文档最后更新时间:2018-10-30 对应vuejs最新稳定版本:2.5.16 (Vuejs每个版本的更新日志见 GitHub)
Vue CLI2升级至Vue CLI3的方法步骤
以下备忘升级至 Vue CLI 3.x 版本后,将项目目录改为新结构时所需做的一些改动。 1. 卸载与安装 npm uninstall vue-cli -g npm install -g @vue/cli 注:若要使用 Vue CLI 3,需将 Node 版本升级至 8.9 及以上。 当使用 nvm 管理 node 版本时,可以使用如下方式切换至需求的 Node 版本: # 安装 >= 8.9 的某个版本 nvm install 8.12.0 # 在当前 session 中使用该版本 nvm use 8.12.0 # 设置默认的 Node 版本 nvm alias default 8.1


