新建一个git仓库
新建仓库.pngvue-cli 初始化一个项目
初始化时的一些配置.png 启动一下试试.png这里选择了手动配置(manually)
启动没有问题,接下来看下目录结构
目录结构.png提交一波代码
提交代码.png安装所需依赖
安装element-ui
安装之前可以先去yarn官网/包搜索一下 然后直接复制右侧的安装命令
安装axios
安装echarts
引入依赖
引入依赖.png路由
views
文件夹下新增文件Login.vue
然后router.js
配置如下
填加第三方图标库
element-ui
本身的图标少得可怜 因此我们从阿里图标库导入我们要的图标 具体操作如下
- 打开阿里图标库 登录
- 新建一个项目 注意避免和
element-ui
前缀重复
- 搜索图标并添加入库
- 将图标添加到项目
- 然后下载到本地 得到一个
download.zip
- 加压后将全部文件拷入自己的
vue
项目中assets/icon
(新建一个)目录下 - 修改
iconfont.css
文件 添加代码并达到一致 注意红框有空格
- 在
main.js
导入改好的css
- 在需要的地方以如下形式增加图标
- 效果如下
待解决问题
- 路由守卫 尝试在
main.js
配置了router.beforeEach((to, from, next) => {})
但是只有在路由变化的时候才会有效 如果直接在url
输入home
地址 不会走这一层鉴权
表单校验
登录作为一个基础的表单 势必要有一定的表单校验 这里使用element-ui
提供的功能 具体做法可以参考这里
关于不同页面挂载不同组件的问题
由于所有.vue
都通过一个入口文件main.js
挂载到App.vue
中 导致配置在App.vue
中的公共组件在不该出现的时候显示了 具体表现为App.vue
挂载了一个菜单的组件 而登录页面并不需要它 这里使用的解决方式是通过v-if的状态来进行控制 如下图
App.vue
关于导航的问题
在router.js
和MenuNav.vue
中配置了菜单路径但是有两个问题 第一个问题是点击导航菜单 路由没有跳转 我的配置如下 感觉应该没有问题才对
结果核查官网发现如下说法
image.png于是配置router属性如下
配置router.png发现还是不好使 看到了控制台的报错 这便是第二个问题
控制台报错.png根据提示 修改为如下方式即可解决
正确的router配置形式.png至此基本框架已经搭建差不多了 明天开始进入数据可视化设计与实现阶段
axios集成接口
同事今天提供了swagger
地址 先把接口集成进来 明天上班调试
- 声明全局变量和公共方法
vue
里声明全局变量的方法很多 这里使用较为广发使用的方式
先创建Global.vue
组件
然后在需要的地方引入 这里是Dashboard.vue
引入了Global.vue
访问页面 可以看到全局组件生效 并且发出了一个post
请求 我现在是断网状态 因此请求没有响应 至此全局变量的配置和axios
的基本使用已经完成
关于多色图标
今天下载了iconfont
的多色图标 当使用的时候发现了丢失色彩的问题 如图
我的引用方式还是和单色图标一样
错误的多色图标引用方式.png开始以为是继承的字体颜色影响了它 排查之后 发现是使用多色图标的方式错了 正确的应该是这样
- 首先在
main.js
引入iconfont.js
- 然后将使用的地方改为如下方式 其中
demo-hotfield-icon
用来规定图标的大小 图标则是用井号#
+图标样式el-icon-hgshuzhuangguanxiwangluotu
关于嵌套路由
由于业务要求有双导航,即顶部一级菜单,侧边栏二级菜单和更多,因此涉及到了路由嵌套的问题,开始全配置在了router.js
的同一级,但是跳转的时候直接跳出了原有的父级结构,实则应该如下配置。
首先配置父级路由,然后在父级路由对象里,添加children
然后是ViewSystem.vue
配置
导航直接配置/test
不要忘记在el-menu
添加router
属性
关于图片路径
我这次用的vue-cli 3 + webpack 4
遇到了一个关于图片路径的问题
首先静态图片没有问题 也就说可以在.vue
中做如下写法
可以看到作为背景图片和img
标签都是可以引入相对路径的 但是当我的路径是动态的情况时 就出现了问题 首先是动态路径引入变量编译报错
这个错误的例子是v-for
循环6个卡片 想把o
作为下标引入不同的6个图片
于是按照提示 修改为下图方式 不报错 但是发现图片没有引入
页面效果.png 页面写法.png查看调试工具 比对了一下静态图片路径和刚刚那种写法生成的动态路径 发现应该是在打包的时候除了问题
错误路径.png 正确路径.png解决方案是通过require
引入图片的相对路径
这样就完成了动态的图片效果
关于循环
刚做循环遍历的时候有几点要记录一下
:key
是必要的
支持of
且数组下标如下写法
综合用法
综合.png另外要说一下这个:key
这个属性的意义在于唯一性 而且不能是个对象 不然报using non-primitive value as key, use string/number value instead.
的错误
子组件通信
由于项目中涉及到非父子组件之间通信 也就是子组件通信 具体表现为子组件A
某个点击事件获得一个参数param
然后将这个param
传给子组件B
触发查询方法并渲染在子组件B中 听起来很简单的一个功能 实现起来着实废了一番心思 我先是用vuex
试着做了一下
文件结构为父组件C.vue
两个子组件A.vue
和B.vue
子组件A的点击事件
.png js.png然后在store.js
中声明状态
最后在子组件B使用计算属性
html.png js.png注意使用computed
时 不需要使用模型 即data
不会有vcode
并且需要定义好get
和set
方法 不然会报错
虽然vuex
让我们实现了值的传递 但也只是将值显示在页面上 而是用这个值去调用方法 这和我们想要的功能还差了一些 因此再考虑通过父组件作为公共仓库来实现这个功能
但是也遇到了问题 具体表现为子组件使用$emit()
父组件使用$on()
但是父组件方法无效 后来找到解决方法后 自己思考这个$on()
应该作用在真正的父组件上 其实我这里的父组件和子组件都是挂载在app.vue
上 理论上都是他的子组件
最后曲线救国 引入了公共仓库bus.js
下面具体说下子组件之间的通信方式
创建bus.js
子组件A.vue
引入bus.js
点击方法传值到父组件C.vue
父组件C.vue
同样引入bus.js
接收这个子组件传过来的方法
image.png这里有个问题是
$on()
会出发多次的问题 使用$off()
先解除绑定
接下来就是传值到另一个子组件B.vue
了
继续在父组件C.vue
编码
最后是子组件B.vue
这样总算完成了子组件之间的通信 但是我一直觉得通过vuex
可以轻松的解决这个问题 以后还要再研究一下
尝试部署
执行yarn run build
之后会看到一个新生成的文件夹dist
我们现在是把这个文件夹下面的所有文件 放到主机上的tomcat
下的webapps
下的dc
下 但是一直404 考虑重启一下服务 执行ssh -t {用户名}@{IP} -p {端口}
连接到主机 但是重启之后依然不好使 考虑baseurl
的问题 在项目的根目录下 创建 vue.config.js
然后 增加如下代码 (由于这里用的是vue-cli 3
所以不再有baseurl
的东西)
其实配置就是多了一个.
然后还要记得把路由的//mode: 'history',
注释掉 这样访问地址如下
会发现一直有个
index.html
这个之后要考虑如何去掉
这里安利一个工具 cyberduck
用来连接远程主机上传代码 比iterm
的lrzsz
多了可视化的界面 而且我一直下不了lrzsz
不过还是记录一下lrzs
的方法
-
安装
执行brew install lrzsz
-
下载脚本
执行
cd ~
git clone https://github.com/mmastrac/iterm2-zmodem.git
mv ~/iterm2-zmodem/iterm2-recv-zmodem.sh /usr/local/bin/iterm2-recv-zmodem.sh
mv ~/iterm2-zmodem/iterm2-send-zmodem.sh /usr/local/bin/iterm2-send-zmodem.sh
如果是手动下载 找不到/usr/local/bin/
就打开finder
然后command+shift+g
输入路径就可以找到了
- 创建profile
在iterm
中对应的profile
中AdvanceTrigger
中填入
Regular expression: rz waiting to receive.\*\*B0100 Action: Run Silent Coprocess Parameters: /usr/local/bin/iterm2-send-zmodem.sh Instant: checked Regular expression: \*\*B00000000000000 Action: Run Silent Coprocess Parameters: /usr/local/bin/iterm2-recv-zmodem.sh Instant: checked
最后在主机上也安装
执行yum install lrzsz -y
上传 rz
下载 sz filename
至此 整个项目已然做了半月有余 完成了从零搭建到部署上线 由于无人可以请教 只能自己不断摸索 期间诸多问题悬而未决 日后仍要上下求索 每每受挫身心俱疲 然解决之后又顿觉神清气爽 望自己越挫越勇
今天开始新的爬坑之路 我们的征途是星辰大海
关于子组件修改父组件的参数
遇到了一个场景 子组件要使用父组件props
的参数作为局部变量 我尝试直接修改this.view
结果报错 因为这样违反了vue
单项数据流的设计思想
于是官方给出了如下的方式
两个方式.png但是我这两个方式都尝试了 均没有达到我的理想 需要继续研究
关于keyup事件
我的项目用了element-ui
作为UI框架 于是在input标签
绑定keyup事件
的时候遇到了该事件不生效的问题 原始写法如下 想要在输入回车的时候触发某个方法
修改为如下方式即可解决 加上1.native1取消掉1element1封装的方法
生效.png关于百度地图
折腾了一中午 搞定了vue
引入百度地图的问题 之前一直想用引入脚本的方式 然后脚本通常都要挂载在index.html
上 然而我使用的vue-cli 3
就没有这个文件啊 然后又用import js
的方式引入 一顿报错 类似BMap is undefined
BMAP api is not a function
的错误 搞得头很大 今天中午偶然发现百度地图支持以组件的形式被引入 于是找到了新的方法
- 安装
yarn add vue-baidu-map
- 全局注册
在main.js
加入下面这句
在组件里添加
使用.png引入之后发现地图一片空白 于是加入了一些属性zoom
center
然后发现无法鼠标滚轮缩放 再加入属性scroll-wheel-zoom
变成如下这样
然后又加入了热力图的组件部分 最后变成如下这样
html.png js.png 配置.png 函数.png 效果.png至此 简单的vue
结合百度地图就完成了 下一步尝试 vue+echarts+baidu-map
由于演示已经结束 demo-319
的内容也告一段落 接下来 我会投入到另个一基于vue的项目 如感兴趣 请移步至k8s
我将继续以开发日志的形式 记录学习过程中的每一步以及遇到的问题和相应的解决方案
网友评论