• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

如何利用vue+vue-router+elementUI实现简易通讯录

vue 搞代码 4年前 (2022-01-08) 8次浏览 已收录 0个评论

这篇文章主要介绍了如何利用vue+vue-router+elementUI实现简易通讯录,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一个具有基本增删改查功能的通讯录,数据保存在本地的localStorage中。

 demo地址: https://junjunhuahua.github.io

1. 所用技术

js框架: vue2  https://cn.vuejs.org/

ui框架: elementUI  http://element.eleme.io/#/zh-CN

脚手架: vue-cli

单页: vue-router  https://router.vuejs.org/zh-cn/

模块打包: webpack

2. 脚手架搭建

 # 全局安装 vue-cli $ npm install -g vue-cli # 创建一个基于 webpack 模板的新项目 $ vue init webpack contact $ cd contact # 安装依赖 $ npm install $ npm run dev 

这是vue官方基于webpack的脚手架,run dev后浏览器会自动打开localhost:8080,也可以使用run build命令,执行build命令后会自动将src目录中的内容进行编译打包压缩,然后在dist目录中可以看到这些文件

3. 目录结构

项目根目录:

 

build为构建项目所用的node代码,config为构建时的一些配置项,dist为打包后(npm run build 用于发布)的代码,node_modules为node模块,src为开发时所用的代码。

src目录:

assets为全局css,图片,以及一些工具类的js,components为vue的组件,router为路由配置,app.vue为主页面的组件,config.js为目录配置项,main.js为入口js

4. main.js

 import Vue from 'vue' import App from './App.vue' import router from './router' import ElementUI from 'element-ui' import utils from './assets/utils.js' import 'element-ui/lib/theme-chalk/index.css' import './assets/normalize.css' Vue.use(ElementUI) Vue.use(utils) /* eslint-disable no-new */ new Vue({ el: '#app', router, ElementUI, template: '', components: { App } }) 

main.js的主要工作是引入一些框架,全局css,以及工具函数,还会处理vue组件的加载,最后实例化vue。

5. App.vue

.vue文件是什么?  https://cn.vuejs.org/v2/guide/single-file-components.html

App.vue可以认为是应用最外层的一个容器。

  <div id="app"> <div class="app-left">    <h3>我的应用</h3> <!-- 此处的index需显示转换为string,否则会报warn --> {{ item.name }} <!-- 此处index格式为父级的index加上下划线加上当前的index,index都需加1 --> {{ subItem.title }}</div><div class="app-right"> </div></div>

这边偷了一个懒,没有把左侧的menu单独做成一个vue而是混入App.vue中。

6. 路由

在正式写代码之前,首先要确定要项目的结构,模块如何划分,哪个模块对应哪个路由。

因为整个项目现在就划分出两个大板块,通讯录与记账本,所以路由第一级就只有contact和account两种。

 Vue.use(VueRouter) let myRouter = new VueRouter({ routes: [ { path: '*', component: () => import('../components/NotFoundComponent.vue') }, { path: '/', redirect: '/contact' }, { path: '/contact', name: 'Contact', component: () => import('../components/contact/List.vue') }, { path: '/contact/edit', name: 'Contact', component: () => import('../components/contact/Edit.vue') }, { path: '/account', name: 'Account', component: () => import('../components/account/list.vue') } ] }) 

可以看到上面/contact和/contact/edit的name是相同的,这是为了让在新增或者编辑联系人页面下,还能让active状态停留在左侧我的联系人上,可以看到App.vue中的代码this.menuIndex = to.name就是进行的该操作,

虽然这样vue会报一个warn告诉我别重名[捂脸],暂时能想到的就是这样的操作方式了,有考虑过依靠判断path来确定是否显示高亮状态,但是当目录层级较深且较复杂的情况下,这样就不是很靠谱了。

component这里为什么是这种形式,而不是直接用一个组件名呢,因来源gaodaimacom搞#^代%!码网为当路由开始多起来的时候,一下把所有的组件都加载进来会非常非常慢且会加载到许多当时并没有用到的组件,通过import这种形式,可以让webpack将路由变换时用到的组件分开打包,网页会根据使用情况再进行

由于router是vue的组件,所以使用时记得要Vue.use一下。

7. 联系人列表页 — contact/list.vue

  <div class="contact-list"> <div class="contact-list-header"> 新增联系人</div><div class="contact-list-content">  <div class="contact-list-wrap"> <h3>高级检索</h3>  搜索</div><div class="contact-list-wrap"> <h3>联系人列表</h3>           ...   编辑删除</div></div></div>

list.vue相当于该模块的主页,新增与编辑页面通过右上角的新建按钮或者列表中的编辑按钮进入,查看页面通过引入View.vue作为一个弹窗放在列表页中展示,不单独设置路由。

列表展示所使用的是elementUI的table组件

删除对象时一定要使用$delete,否则不会触发视图更新

view.vue代码:

  <div class="contact-view">     ...  </div>

这里有个比较值得注意的点,就是关闭查看弹窗,弹窗的开启关闭状态通过list也就是父级中的viewShow来控制,viewShow通过view也就是子级中的props流入到子级中,但是vue中的数据流向是默认是单向的,想要子级中修改父级属性必须使用emit,详见上面代码。

这里原先使用elementUI的dialog组件的自己的关闭,会报错,只能自己修改了。

ps: 为什么这里不用vuex处理父子组件的通信?因为如果是一个大型的后台管理系统,像这样的情况会经常发生,如果都放在vuex中管理,那vuex的体积会非常庞大,反而不利于维护。

8. 联系人编辑(新增)页 — edit.vue

  <div class="contact-edit">          ...   {{ btnName }}取消</div>

可以看到mounted与beforeRouteUpdate中的代码有些重合,那是因为vue在路由仅仅只是参数变换的时候,是不会重新重新加载组件的,所以需要在beforeRouteUpdate中处理初始的数据。

nameValid与mobileValid为表单验证的函数,el-form配置rules属性名称,然后data中相应的添加rules即可开启表单验证,但是有一点一定要注意el-form-item上一定要设置对应的prop属性,rules才会生效。

9. 总结

非常简单的一个项目,但是有几个点一定要关注好:

模块的划分,模块划分要合理,尽量能保证模块的复用性

状态的管理,一定要明确什么东西要放vuex中,什么东西不用放,以免使项目的维护反而变得更复杂

如果是大型项目,路由中一定要让.vue文件在需要时再引入,否则会加重初次加载的负担

为了减少篇幅,删减了很多不重要的代码,需要查看源码请移步,项目地址: https://github.com/junjunhuahua/vue-basic-demo

github上的项目已改为后台提供接口,不再使用localStorage操作数据,后台项目使用MongoDB+node实现,具体项目:https://github.com/junjunhuahua/mongodb-demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网

以上就是如何利用vue+vue-router+elementUI实现简易通讯录的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何利用vue+vue-router+elementUI实现简易通讯录

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址