这个例子还是比较简单的,独立完成后,能大概知道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
#等待完成
完成后可能会有警告,没事,不是ERR就好
$ cd my-project #进入刚新建的文件夹
$ cnpm install #这里用的是淘宝的NPM镜像,不懂可以自行搜索cnpm
$ npm run dev
###I Your application is running here: http://localhost:8080
**确保端口没被占用,打开localhost:8080 see see **
打开我们的项目可见如下:
名称 | 说明 |
---|---|
build | 项目构建的一些代码 |
config | 开发环境的配置 |
node_modules | 一些依赖包 |
src | 源码,我们就在这个文件夹内写代码 |
static | 静态文件 |
.babelrc | ES6编译的一些配置 |
.editorconfig | 代码风格配置文件 |
.gitignore | git上传时忽略的一些文件,比如node_modules这个文 |
.postcssrc.js | 听说是转换CSS样式的 |
index.html | 入口页面 |
package-lock.json | 听说是更详细的package.json |
package.json | 项目信息,项目名称,开发的依赖的记录等,一个JSON文件 |
现在打开src\componnets\HelloWorld.vue 把大部分代码删除,剩余如下:
{{ msg }}
到这里用了点ES6语法,如果对export和import不了解的,建议看看相关的介绍,暂时不想看也可以照着敲代码。不过建议还是看看,只需10分钟了解下export和import就好—— 阮一峰ECMAScript 6 入门
可以看到,之前打开的页面变了样:
####现在我们来安装一下element-ui(关于element-ui详细情况请自行搜索)
选择2,打开package.json,找到devDependencies并在最后加上"element-ui": “^2.2.1”
"devDependencies": { ... ... "element-ui": "^2.2.1"
打开命令行停止服务,再通过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: '' })
添加了这三行,我们就可以使用element-ui了
接下来在components文件夹内新建一个NewContact.vue 文件,添加如下代码
1
打开之前的HelloWorld.vue对内容进行修改(router是官方路由插件,router-link to是router的语法):
{{ msg }}
打开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 } ] })
保存后打开页面可以看到如下:
之前的welcome变成了可点击的链接,点击后跳转看到如下页面
至此,已经我们已经把该引入的依赖,和路由的简单配置,简单组件的使用给完成了
接下来我们把精力都放到NewContact.vue这个组件,后面的代码几乎都在这个组件
打开NewContact.vue键入如下代码:
姓名:{{info.name}} 年龄:{{info.age}} 性别:{{info.sex}}
el-input
是element-ui的组件,以el-开头的是element-ui的组件
v-model
这里的v-model
是Vue的指令,官方说法是——在表单控件或者组件上创建双向绑定。
="info.name"
就是v-model绑定的数据,在data中return的内容里看到info.name
对应的是''
;info.age
对应的是null
return { info: { name: '', age: null, sex: '' }
当我们打开http://localhost:8080/#/newcontact
在输入框输入内容时可见,姓名:{{info.name}}
双花括号里的内容也跟着改变,这就是双向绑定
v-for="item in options"
就是循环options这个数组的内容
options: [ '女','男','保密' ]
如果在里面添加内容,那么下拉菜单的内容会一起变化,一 一对应
:value="item"
会把你选的(‘女',‘男',‘保密')传给
v-model="info.sex"
会传给data中的info.sex
return { info: { name: '', age: null, sex: '' }
接下来在加入新代码,NewContact.vue目前的代码如下:
.....创建 删除
这里就是创建了一个按钮,@是v-on的缩写,点击后会出发create这个函数
就是表格要绑定的数据
在表格绑定数据情况下prop用于数据传递,tabeldata里的name
是Vue2.5.0后替代之前scope的作用域插槽,"a"是随便的名字,就用用来后去table的状态,可以获取的row, column, $index和store,这里我们只需要获取index就行了,相关具体内容点这里
@click="del(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'} ]
打开页面可以看到
我们点击创建和删除按钮并没有反应,所以我们要添加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-scope="a" a.$index传过来的 } }
到这里已经完成了添加和删除,为了在我们刷新页面后,数据依然保存着,我们可以用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)) } }
getItem
和setItem
是window.localStorage的获取和保存数据的方法
我们用JSON.stringify和JSON.parse把数据转成字符串和解析,这样就方便我们写入tabledata
接下来我们添加新代码
这里是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)) } }
完成后我们要进行打包,方便直接在浏览器中运行
打开/config/index.js
build: { // Template for index.html index: path.resolve(__dirname, '../dist/index.html'), // Paths assetsRoot: path.resolve(__dirname, '../dist'), assetsSubDirectory: 'static', assetsPublicPath: './',//加了个. 避免生产路径的错误 /** * Source Maps */ productionSourceMap: false, //改为false
然后运行$ npm run build
等待完成,会生成dist文件夹,直接打开里面的index.html就可以在浏览器运行了
以上所述是小编给大家介绍的基于vue-cli、elementUI的Vue超简单入门小例子解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!