项目架构
Vue.js + Vue Router + Vuex + iView + eCharts
项目使用 Vue CLI 创建的
yarn build 打包问题
1. 执行 yarn build,生成的静态页显示404页面,无法正常浏览
原来是 vue-router 的配置项设置问题,设置的是 history 模式
mode: 'history',
删除这行代码后,就可以在 build 后正常查看 index.html 了
其实不是设置错误,是因为设置成 history 模式后,还需要在后台服务器进行相应设置
浏览器兼容性问题
iview报错:Promise 不支持
1. vue.config.js
中的 transpileDependencies
选项添加依赖名称。
transpileDependencies: ['iView']
2.babel.config.js
中使用 @vue/babel-preset-app
的 polyfills 选项预包含所需要的 polyfill。
module.exports = { presets: [ ['@vue/app', { polyfills: [ 'es6.promise' ] }] ] }
3.使用 useBuiltIns: 'entry'
然后在入口文件添加 import '@babel/polyfill'
(最终的包大小可能会增加)
参考: https://cli.vuejs.org/zh/guide/browser-compatibility.html#polyfill
iView中遇到的问题
1.Menu 菜单使用 subMenu 生成菜单,当有一项没有二级菜单时,互斥效果异常
在 Menu 的 change 事件中,在点击没有二级菜单的那一项的时候,执行下面的操作更新 Menu 的 currentActiveName 的值
this.$refs.menuName.currentActiveName = '当前点击项的 name 值'
2.当使用 v-for 生成 Menu 菜单时,默认选中项不能显示相应样式
在组件的 created 中写入相应更新事件,在 data 中的 openNames, activeName 更新后,在 $nextTick 中执行更新事件。
this.openNames = ['parent-name'] this.activeName = name this.$nextTick(() => { this.$refs.pageLeft.updateOpened() this.$refs.pageLeft.updateActiveName() })
3. iView 样式复写
新建一个 less 文件,引入下面的 less 文件之后
@import '~iview/src/styles/index.less';
就可以修改原来的变量配置了
4. DatePicker选择日期后格式错误
变成UTC 即2019-03-10T16:00:00.000Z 或 Wed Jun 10 2020 15:07:11 GMT+0800
<DatePicker type="date" :value="paramValue.maxcreateTime" @on-change="paramValue.maxcreateTime = $event" > </DatePicker>
用 on-change 事件的返回值,给绑定的数据赋值。on-change的返回值是已经格式化后的日期,是我们想要的格式。 不能用 v-model 了,否则还是错误格式。
5. Modal 每次打开都刷新数据的写法
<Modal v-model="showModal"> <Children :list="list" v-if="showModal" /> </Modal>
Modal 上使用 v-model 进行双向绑定,子组件上使用 v-if 进行判断加载
6. Checkbox、Radio 的 value 值设置
是在 label 中写
<Checkbox label="twitter">Twitter</Checkbox> <Radio label="apple">Apple</Radio>
7. FormItem 的验证功能
ruleInline 中的数据结构要和 formInline 中的相同
<Form ref="formInline" :model="formInline" :rules="ruleInline"> <FormItem prop="user"> <Input type="text" v-model="formInline.user"/> </FormItem> </Form>
8. Input number类型必填判断
校验中需要写明 type:”number”,否则数据不变化就会报为空
<Input type="number" number v-model="formItem.numberCode"> //校验 [{required: true, message: "必填项", trigger: "blur",type: "number"}]
项目中配置 Less
因为 iView 用的是 less,所以项目中需要配置 less 的依赖
安装好 less 后,还需要在 vue.config.js 中添加相应的配置
css:{ loaderOptions:{ less:{ javascriptEnabled: true } } },
项目中引入 jQurey
1.引入后一直不生效
需要配置vue.config.js,配置后就可以按照说明正常使用了
configureWebpack: {//引入jquery
plugins: [
new webpack.ProvidePlugin({
$:"jquery",
jQuery:"jquery"
})
]
}
备注:个人觉得 vue 项目中,没有必要引入 jquery,但是总有人愿意用