基于vue-cli、elementUI的Vue超简单入门小例子

发布时间:2026/7/28 20:23:37
基于vue-cli、elementUI的Vue超简单入门小例子 基于vue-cli、elementUI的Vue超简单入门小例子这个例子还是比较简单的独立完成后能大概知道vue是干嘛的可以写个todoList的小例子。开始写例子之前先对环境的部署做点简单的介绍其实和Vue官方的差不多。#如若没有安装过vue-cli,先全局安装一下vue-cli $ cnpm i -g vue-cli #到自己喜欢的目录下创建一个基于 webpack 模板的新项目 $ vue init webpack my-project # # #之后会有如下询问 ? Project name (my-project) #回车 ? Project description #回车也可以写点项目描述 ? Author #回车或者输入作者 ? Vue build standalone #回车 ? Install vue-router? (Y/n) #这里是官方推荐的路由果断yes ? Use ESLint to lint your code? #No ? Set up unit tests #No ? Setup e2e tests with Nightwatch? #No ? Should we run npm install for you after the project has been created? (recommended) Yes, use NPM #可以按上下方向键选择这里我选第一个NPM按回车确认 Yes, use Yarn No, I will handle that myself #等待完成1234567891011121314151617181920完成后可能会有警告没事不是ERR就好$ cd my-project #进入刚新建的文件夹 $ cnpm install #这里用的是淘宝的NPM镜像,不懂可以自行搜索cnpm $ npm run dev ###I Your application is running here: http://localhost:80801234**确保端口没被占用打开localhost:8080 see see **打开我们的项目可见如下名称说明build项目构建的一些代码config开发环境的配置node_modules一些依赖包src源码我们就在这个文件夹内写代码static静态文件.babelrcES6编译的一些配置.editorconfig代码风格配置文件.gitignoregit上传时忽略的一些文件比如node_modules这个文.postcssrc.js听说是转换CSS样式的index.html入口页面package-lock.json听说是更详细的package.jsonpackage.json项目信息项目名称开发的依赖的记录等一个JSON文件现在打开src\componnets\HelloWorld.vue 把大部分代码删除剩余如下template h1{{ msg }}/h1 /template script export default { //ES6语法用于输出到外部这样就可以在其他文件内用import输入 name: HelloWorld, data () { //由于是组件data必须是个函数这是ES6写法data后面加括号相当于data: function () {} return { //记得return不然接收不到数据 msg: Welcome //上面的 msg 就是这里输出的 } } } /script style h1 { font-weight: normal; } a { color: #42b983; } /style123456789101112131415161718192021到这里用了点ES6语法如果对export和import不了解的建议看看相关的介绍暂时不想看也可以照着敲代码。不过建议还是看看只需10分钟了解下export和import就好—— 阮一峰ECMAScript 6 入门可以看到之前打开的页面变了样####现在我们来安装一下element-ui关于element-ui详细情况请自行搜索可以按照官方方法使用npm i element-ui -S命令进行安装也可以在package.json中添加后通过cnpm install进行安装这里我们选择2打开package.json找到devDependencies并在最后加上element-ui: “^2.2.1”devDependencies: { ... ... element-ui: ^2.2.11234打开命令行停止服务再通过cnpm install进行安装安装完成后npm run dev启动打开main.js在里面添加三行内容import ElementUI from element-ui //新添加 import element-ui/lib/theme-chalk/index.css //新添加避免后期打包样式不同要放在import App from ./App;之前 import Vue from vue import App from ./App import router from ./router Vue.use(ElementUI) //新添加 Vue.config.productionTip false /* eslint-disable no-new */ new Vue({ el: #app, router, components: { App }, template: App/ })123456789101112131415161718添加了这三行我们就可以使用element-ui了接下来在components文件夹内新建一个NewContact.vue文件添加如下代码template el-row el-button typesuccess1/el-button /el-row /template script /script style /style123456789101112打开之前的HelloWorld.vue对内容进行修改router是官方路由插件router-link to是router的语法template !-- 这里router-link tonewcontact会把路由导航到http://localhost:8080/#/newcontact -- router-link tonewcontacth1{{ msg }}/h1/router-link /template1234打开router/index.js添加新路由router是官方路由插件深入学习请查看文档import Vue from vue import Router from vue-router import HelloWorld from /components/HelloWorld import NewContact from /components/NewContact//新添加之后在下方的component: NewContact才会生效 Vue.use(Router) export default new Router({ routes: [ { path: /, name: HelloWorld, component: HelloWorld }, { path: /newcontact,//和router-link to相呼应导航到/newcontact name: NewContact, component: NewContact } ] })12345678910111213141516171819保存后打开页面可以看到如下之前的welcome变成了可点击的链接点击后跳转看到如下页面至此已经我们已经把该引入的依赖和路由的简单配置简单组件的使用给完成了接下来我们把精力都放到NewContact.vue这个组件后面的代码几乎都在这个组件打开NewContact.vue键入如下代码template el-row 姓名{{info.name}} el-input v-modelinfo.name placeholder请输入姓名/el-input 年龄{{info.age}} el-input v-modelinfo.age placeholder请输入年龄/el-input 性别{{info.sex}} el-select v-modelinfo.sex placeholder请选择 el-option v-foritem in options :keyitem :valueitem/el-option!-- 这里的key官方推荐在v-for时使用不然会警告但不影响使用 -- /el-select /el-row /template script export default { name: NewContact, data(){ return { info: { name: , age: null, sex: }, options: [ 女,男,保密 ] } } } /script style /style1234567891011121314151617181920212223242526272829303132el-input v-modelinfo.name/el-inputel-input是element-ui的组件以el-开头的是element-ui的组件v-model这里的v-model是Vue的指令官方说法是——在表单控件或者组件上创建双向绑定。info.name就是v-model绑定的数据在data中return的内容里看到info.name对应的是info.age对应的是nullreturn { info: { name: , age: null, sex: }123456当我们打开http://localhost:8080/#/newcontact在输入框输入内容时可见姓名{{info.name}}双花括号里的内容也跟着改变这就是双向绑定el-option v-foritem in options :keyitem :valueitemv-foritem in options就是循环options这个数组的内容options: [ 女,男,保密 ]123如果在里面添加内容那么下拉菜单的内容会一起变化一 一对应:valueitem会把你选的‘女’‘男’‘保密’传给el-select v-modelinfo.sexv-modelinfo.sex会传给data中的info.sexreturn { info: { name: , age: null, sex: }123456接下来在加入新代码NewContact.vue目前的代码如下..... /el-select el-button clickcreate创建/el-button template el-table :datatabledata alignleft el-table-column propname label姓名/el-table-column el-table-column propage label年龄/el-table-column el-table-column propsex label性别/el-table-column el-table-column label操作 template slot-scopea el-button sizemini typedanger clickdel(a.$index)删除/el-button /template /el-table-column /el-table /template /el-row /template script export default { name: NewContact, data(){ return { info: { name: , age: null, sex: }, options: [ 女,男,保密 ], tabledata:[ {name: Leo, age: 12, sex: man}, {name: Lei, age: 22, sex: women}, {name: Lii, age: 65, sex: men} ] } } } /script style /style12345678910111213141516171819202122232425262728293031323334353637383940414243el-button clickcreate typesuccess创建/el-button这里就是创建了一个按钮是v-on的缩写点击后会出发create这个函数el-table :datatabledata就是表格要绑定的数据el-table-column propname在表格绑定数据情况下prop用于数据传递tabeldata里的nametemplate slot-scopea是Vue2.5.0后替代之前scope的作用域插槽a是随便的名字就用用来后去table的状态可以获取的row, column, $index和store这里我们只需要获取index就行了相关具体内容点这里clickdel(a.$index)是v-on的缩写表示点击后调用del函数a.$index表示slot-scope获取到的index值tabledata:[//这里的内容是方便我们看到table的变化可见页面上的table有了如下的内容 {name: Leo, age: 12, sex: man}, {name: Lei, age: 22, sex: women}, {name: Lii, age: 65, sex: men} ]12345打开页面可以看到我们点击创建和删除按钮并没有反应所以我们要添加methods在它内部添加两个方法一个是创建一个是删除data(){ ... }, methods: {//添加在data(){...},的后面 create(){ this.tabledata.push(this.info)//给tabledata添加一个对象之前我们创建的info this.info {name: , age: null, sex: }//点击创建后让option还原而不是停留在所选的项 }, del(index){ this.tabledata.splice(index,1)//删除点击的对象index是lot-scopea a.$index传过来的 } }123456789101112到这里已经完成了添加和删除为了在我们刷新页面后数据依然保存着我们可以用localStorage本地存储数据关于localStorage可以点击这里了解接下来我们在src内新建一个store文件夹和App.vue、components同一个层级在里面新建一个store.js内容如下const STORAGE_KEY tabale-vuejs//名字随便起 export default {//向往输出以便组件接收 fetch() {//我们定义的获取数据的方法 return JSON.parse(window.localStorage.getItem(STORAGE_KEY) || []) }, save(items) {//我们定义的保存数据的方法 window.localStorage.setItem(STORAGE_KEY, JSON.stringify(items)) } }12345678910getItem和setItem是window.localStorage的获取和保存数据的方法我们用JSON.stringify和JSON.parse把数据转成字符串和解析这样就方便我们写入tabledata接下来我们添加新代码script import Storage from ../store/store//新添加把刚写的localStorage导入 export default { name: NewContact, data(){ return { info: { name: , age: null, sex: }, options: [ 女,男,保密 ], tabledata: Storage.fetch()//把之前的删除写入这个获取数据的方法 } }, methods: { create(){ this.tabledata.push(this.info) this.info {name: , age: null, sex: } }, del(index){ this.tabledata.splice(index,1) } }, watch:{//新添加watch是vue的监听一旦监听对象有变化就会执行相应操作 tabledata{//新添加被监听的对象 handler(items){Storage.save(items)},//新添加监听对象变化后所做的操作一个函数保存数据 deep: true//深度监听避免数据的嵌套层数太多要使用深度监听防止数据层级过多监听不到 }12345678910111213141516171819202122232425262728293031tabledata:由于fetch()得到的是数组所以直接tabledata: 后写入就行类似于tabledata:[{...},{...}]1当我们添加删除数据时可以打开chrmoe浏览器的F12ApplicationLocal Storage进行查看总的来说就是我们点击页面上的创建按钮watch监听到tabledata有变化就执行savedata(items){Storage.save(items)}进行数据保存点击删除时tabledata也有变化同样会执行保存可能之前写的内容会有不小心写错字母的情况最后把NewContact.vue稍稍修改样式后把完整的内容拷贝到下方NewContact.vuetemplate el-row el-col :xs24 :sm18 :md14 :lg10 idmain label姓名/label el-input v-modelinfo.name placeholder请输入姓名/el-input label年龄/label el-input v-modelinfo.age placeholder请输入年龄/el-input label性别/label el-select v-modelinfo.sex placeholder请选择 el-option v-foritem in options :keyitem :valueitem/el-option!-- 这里的key官方推荐在v-for时使用不然会警告但不影响使用 -- /el-select el-button classbtn-auto clickcreate typesuccess创建/el-button template el-table :datatabledata alignleft el-table-column propname label姓名/el-table-column el-table-column propage label年龄/el-table-column el-table-column propsex label性别/el-table-column el-table-column label操作 template slot-scopea el-button sizemini typedanger clickdel(a.$index)删除/el-button /template /el-table-column /el-table /template /el-col /el-row /template script import Storage from ../store/store export default { name: NewContact, data(){ return { info: { name: , age: null, sex: }, options: [ 女,男,保密 ], tabledata: Storage.fetch() } }, methods: { create(){ this.tabledata.push(this.info) this.info {name: , age: null, sex: } }, del(index){ this.tabledata.splice(index,1) } }, watch:{ tabledata:{ handler(items){Storage.save(items)}, deep: true } } } /script style #main{ float: none; margin: 0 auto; } .el-input{ padding-bottom: 5px; } .el-select { display: block; } .btn-auto{ width: 100%; margin-top: 12px; } /style123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778这里是localStorage:const STORAGE_KEY tabale-vuejs export default { fetch() { return JSON.parse(window.localStorage.getItem(STORAGE_KEY) || []) }, save(items) { window.localStorage.setItem(STORAGE_KEY, JSON.stringify(items)) } }12345678910完成后我们要进行打包方便直接在浏览器中运行打开/config/index.jsbuild: { // Template for index.html index: path.resolve(__dirname, ../dist/index.html), // Paths assetsRoot: path.resolve(__dirname, ../dist), assetsSubDirectory: static, assetsPublicPath: ./,//加了个. 避免生产路径的错误 /** * Source Maps */ productionSourceMap: false, //改为false1234567891011121314然后运行$ npm run build等待完成会生成dist文件夹直接打开里面的index.html就可以在浏览器运行了