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

2023-10-27

这里写图片描述

  • 这个例子还是比较简单的,独立完成后,能大概知道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 把大部分代码删除,剩余如下:

<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;
}
</style>

到这里用了点ES6语法,如果对export和import不了解的,建议看看相关的介绍,暂时不想看也可以照着敲代码。不过建议还是看看,只需10分钟了解下export和import就好—— 阮一峰ECMAScript 6 入门

  • 可以看到,之前打开的页面变了样:
    这里写图片描述

####现在我们来安装一下element-ui(关于element-ui详细情况请自行搜索)

  1. 可以按照官方方法使用npm i element-ui -S命令进行安装
  2. 也可以在package.json中添加,后通过cnpm install进行安装

这里我们选择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: '<App/>'
})

添加了这三行,我们就可以使用element-ui了
接下来在components文件夹内新建一个NewContact.vue 文件,添加如下代码

<template>
  <el-row>
    <el-button type="success">1</el-button>
  </el-row>
</template>
<script>

</script>
<style>

</style>

打开之前的HelloWorld.vue对内容进行修改(router是官方路由插件,router-link to是router的语法):

<template>
<!-- 这里router-link to="newcontact"会把路由导航到http://localhost:8080/#/newcontact   -->
    <router-link to="newcontact"><h1>{{ msg }}</h1></router-link>
</template>

打开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键入如下代码:

<template>
  <el-row>
    姓名:{{info.name}}
    <el-input v-model="info.name" placeholder="请输入姓名"></el-input>
    年龄:{{info.age}}
    <el-input v-model="info.age" placeholder="请输入年龄"></el-input>
    性别:{{info.sex}}
    <el-select v-model="info.sex" placeholder="请选择">
      <el-option v-for="item in options" :key="item" :value="item"></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>

</style>

<el-input v-model="info.name"></el-input>
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}}双花括号里的内容也跟着改变,这就是双向绑定
这里写图片描述
这里写图片描述
<el-option v-for="item in options" :key="item" :value="item">
v-for="item in options"就是循环options这个数组的内容

options: [
        '女','男','保密'
      ]

如果在里面添加内容,那么下拉菜单的内容会一起变化,一 一对应
:value="item"会把你选的(‘女’,‘男’,‘保密’)传给<el-select v-model="info.sex">
v-model="info.sex"会传给data中的info.sex

return {
      info: {
        name: '',
        age: null,
        sex: ''
      }

接下来在加入新代码,NewContact.vue目前的代码如下:

.....
    </el-select>
    <el-button @click="create">创建</el-button>
    <template>
      <el-table :data="tabledata" align="left">
        <el-table-column prop="name" label="姓名"></el-table-column>
        <el-table-column prop="age" label="年龄"></el-table-column>
        <el-table-column prop="sex" label="性别"></el-table-column>
        <el-table-column label="操作">
          <template slot-scope="a">
            <el-button size="mini" type="danger" @click="del(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>

</style>

<el-button @click="create" type="success">创建</el-button>
这里就是创建了一个按钮,@是v-on的缩写,点击后会出发create这个函数

<el-table :data="tabledata">
就是表格要绑定的数据

<el-table-column prop="name">
在表格绑定数据情况下prop用于数据传递,tabeldata里的name

<template slot-scope="a">
是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))
	}
}

getItemsetItem是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//深度监听,避免数据的嵌套层数太多,要使用深度监听,防止数据层级过多监听不到  
  }

tabledata:由于fetch()得到的是数组,所以直接tabledata: 后写入就行类似于

tabledata:[{...},{...}]

当我们添加删除数据时,可以打开chrmoe浏览器的F12>Application>Local Storage进行查看
这里写图片描述

总的来说就是我们点击页面上的创建按钮,watch监听到tabledata有变化,就执行savedata(items){Storage.save(items)}进行数据保存,点击删除时,tabledata也有变化,同样会执行保存
可能之前写的内容会有不小心写错字母的情况,最后把NewContact.vue稍稍修改样式后,把完整的内容拷贝到下方:
NewContact.vue

<template>
  <el-row>
    <el-col :xs="24" :sm="18" :md="14" :lg="10" id="main">
    <label>姓名:</label>  
    <el-input v-model="info.name" placeholder="请输入姓名"></el-input>
    <label>年龄:</label>
    <el-input v-model="info.age" placeholder="请输入年龄"></el-input>
    <label>性别:</label>
    <el-select v-model="info.sex" placeholder="请选择">
      <el-option v-for="item in options" :key="item" :value="item"></el-option><!-- 这里的key官方推荐在v-for时使用,不然会警告,但不影响使用 -->
    </el-select>
    <el-button  class="btn-auto" @click="create" type="success">创建</el-button>
    <template>
      <el-table :data="tabledata" align="left">
        <el-table-column prop="name" label="姓名"></el-table-column>
        <el-table-column prop="age" label="年龄"></el-table-column>
        <el-table-column prop="sex" label="性别"></el-table-column>
        <el-table-column label="操作">
          <template slot-scope="a">
            <el-button size="mini" type="danger" @click="del(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;
  }
</style>

这里是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就可以在浏览器运行了

也可以点这里看看效果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • python字符串与数字类型转换

    str与int i 10 s str i s 10 s 1 i int s i 1 str与float st 4 t float st t 0 4 st 0 4 t float st t 0 4 t 0 4 st str t st 0 4
  • libevent (一) socket属性设置与初始化操作

    socket属性设置与初始化操作 libevent是一个事件触发的网络库 适用于windows linux bsd等多种平台 内部使用select epoll kqueue等系统调用管理事件机制 著名分布式缓存软件memcached也是li
  • 小程序怎么搭建?学会这些技巧,开启创业之路

    随着移动互联网的发展 小程序成为了一种重要的创业工具 小程序具有开发周期短 运营成本低 用户体验好等特点 被越来越多的企业和个人用来实现商业价值 本文将通过一个案例来介绍小程序的搭建技巧 帮助创业者更好地开启创业之路 案例介绍 某家生鲜电商
  • CentOS下安装配置Phabricator

    1 下载快捷安装sh http download csdn net detail u012547633 9882697 把centos版的phabricator安装脚本下载到opt目录并安装 cd opt chmod 777 install
  • java版本号分段比较_版本号判断,例如:1.0.0比较1.0.1

    有的时候可能会判断客户端的版本号信息 多位数的版本号判断做个记录 代码分享者 zzp 注意 Java中应该吧分割的正则使用 来分割小数点字符串 分割 NSArray curVerArr currentVersion componentsSe

随机推荐

  • 了解Chat GPT

    CHATGPT是一款强大的人工智能语言模型 可以回答任何问题和开启有趣的对话 以下是一些使用CHATGPT的技巧和提示 提问明确 CHATGPT能够回答任何问题 但它需要清晰和明确的问题来给出准确的答案 因此 在提问时要尽可能明确和具体 尝
  • 【JDBC】-- Java连接数据库方法(Mysql8+idea)

    Java Database Connectivity 简称JDBC 是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口 提供了诸如查询和更新数据库中数据的方法 Java如何连接数据库 下面使用Mysql8版本 编译器使用ide
  • Flink_CDC搭建及简单使用

    Flink CDC搭建及简单使用 1 CDC简介 CDC Change Data Capture 在广义的概念上 只要能捕获数据变更的技术 都可以称为 CDC 但通常我们说的CDC 技术主要面向数据库 包括常见的mysql Oracle M
  • Dubbo-admin 新版本启动问题记录

    Dubbo admin 新版本启动问题记录 文章目录 Dubbo admin 新版本启动问题记录 1 安装步骤 a 下载zookeeper b 下载并编译dubbo 2 总结 1 安装步骤 直接按照官网下载下来的软件 并按照说明安装软件会存
  • Vagrant虚拟机安装,磁盘扩容以及局域网内访问教程

    1 下载vagrant以及virtualBox 配上vagrant virtualBox线上下载地址 vagrant下载地址 virtualBox下载地址 2 开始准备安装镜像文件 找到需要安装的系统镜像文件 配上vagrant镜像地址 v
  • Linux strace 命令 说明

    Strace是Linux中一个调试和跟踪工具 它可以接管被跟踪进程执行的系统调用和收到的信号 然后把每一个执行的系统调用的名字 参数和返回值打印出来 可以通过strace找到问题出现在user层还是kernel层 strace 显示这些调用
  • 集群基础3——haproxy负载均衡apache

    文章目录 一 环境说明 二 安装配置httpd 三 安装配置haproxy 四 验证http负载均衡 五 配置https负载均衡 六 haproxy网页监控 6 1 监控参数详解 6 2 页面操作 一 环境说明 使用haproxy对apac
  • jmeter中body data使用post请求的json格式提交

    之前介绍过jmeter中post的默认提交形式form表达提交 Content type application x www form urlencoded 使用直接 填写参数的形式 本次介绍的是jmeter中body data使用也就是j
  • 学历和工作年限决定了程序员的工资水平吗?

    根据中国互联网络信息中心 CNNIC 近日发布的第 45 次 中国互联网络发展状况统计报告 可知 截至 2020 年 03 月 中国网民规模为 9 04 亿 较 2018 年底增加 7508 万 其中农村网民规模达 2 55 亿 占网民整体
  • 时序预测

    时序预测 MATLAB实现SVM 支持向量机 时间序列多步预测 目录 时序预测 MATLAB实现SVM 支持向量机 时间序列多步预测 预测效果 模型描述 程序设计 学习总结 参考资料 预测效果 模型描述 Options 可用的选项即表示的涵
  • maven环境快速搭建

    最近 开发中要用到maven 所以对maven进行了简单的学习 因为有个maven高手在身边 所以 很快就上手了 我这里算是自我总结吧 关于maven是什么东东 请参考其它文章 准备工作 Jdk 1 5以上java开发环境 Eclipse
  • 图解TCP/IP

    第1章 网络基础知识 本章总结了深入理解TCP IP所必备的基础知识 其中包括计算机与网络发展的历史及其标准化过程 OSI参考模型 网络概念的本质 网络构建的设备等 1 5 4 OSI参考模型中各个分层的作用 应用层 为应用程序提供服务并规
  • Python爬虫入门6:模拟浏览器访问网页的http报文体压缩传输

    前往老猿Python博客 https blog csdn net LaoYuanPython 一 引言 在前面章节中介绍了使用urllib包的request模块访问网页的方法 但上节特别说明http报文头Accept Encoding最好不
  • pytorch和tensorflow有什么区别?

    PyTorch 是一种用于构建深度学习模型的功能完备框架 同时tensorflow也是常用的框架之一 大家在学习的时候 尝尝会用来做比较 那么pytorch和tensorflow有什么区别 大家所关心的问题 解答来了 pytorch和ten
  • vue拖拽实现

    拖拽介绍 目标是将左侧list中的item拖入右侧card中 如下所示 将list1和list3拖入右侧拖拽区 一 拖拽样式实现 使用vue vuetifyjs实现 页面布局可根据不同的UI库自行修改 html内容
  • C++消消乐

    键盘版 include
  • 5、JSON.parse()

    JSON parse JSON 通常用于与服务端交换数据 在接收服务器数据时一般是字符串 我们可以使用 JSON parse 方法将数据转换为 JavaScript 对象 语法 JSON parse text reviver 参数说明 te
  • 虚幻引擎程序化资源生成框架PCG 之Extents Modifier 和 Bounds Modifier

    Extents Modifier 和 Bounds Modifier这两个节点看起来很像 都是修改Point的Bouding Box 查看一下源代码 简单看一下它们的区别 文章目录 两个节点的代码对比 Bounds Modifier 源代码
  • MySQL使用ReplicationConnection导致的连接失效分析与解决

    MySQL数据库读写分离 是提高服务质量的常用手段之一 而对于技术方案 有很多成熟开源框架或方案 例如 sharding jdbc spring中的AbstractRoutingDatasource MySQL Router等 而mysql
  • 基于vue-cli、elementUI的Vue超简单入门小例子

    这个例子还是比较简单的 独立完成后 能大概知道vue是干嘛的 可以写个todoList的小例子 开始写例子之前 先对环境的部署做点简单的介绍 其实和Vue官方的差不多 如若没有安装过vue cli 先全局安装一下vue cli cnpm i