Vue2 +Element-ui实现前端页面

这篇具有很好参考价值的文章主要介绍了Vue2 +Element-ui实现前端页面。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.页面项目

以一个简单的前端页面为例。主要是利用vue和element-ui实现。

里面涉及的主要包括:新建vue项目、一行多个输入框、页面实现等。

 

使用vue2项目写一个页面,VUE,vue.js,前端,ui

2.项目流程

(1)新建项目

①首先安装nodejs,这部分在此就不讲啦。

②然后安装vue-cli:

npm install -g @vue/cli

查看是否安装成功:

vue-V

安装成功之后就输出vue的版本

③在cmd窗口新建一个vue2脚手架项目(目前用idea创建的话是默认vue3项目)。

使用vue2项目写一个页面,VUE,vue.js,前端,ui

 (2)用idea打开项目

项目文件是这样:router主要是用来实现路由(页面跳转)、views文件夹下就是写页面的地方。

使用vue2项目写一个页面,VUE,vue.js,前端,ui

 (3)vue各部分基本介绍

①data

data中主要存放数据,在UI层面中的数据都是放在data中

data() {
    return {
      searchIndex: '',
      select: '',
      searchUnit: {
        pageIndex: 0
      },
      tableData: [],
      loading: false,
      totalpage: 0,
      currentPage: 1
    }
  },

②methods

所有的方法都是放在methods

使用vue2项目写一个页面,VUE,vue.js,前端,ui

 

③mounted

**模板渲染成html后调用**,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。**通常在里面执行dom操作**。

DOM操作:dom是一种文档对象模型,同时也是用于html编程的接口,**通过dom来操作页面中的元素**

与created的区别:

这里:通过id什么的去查找页面元素是**找得到的**

④created

在**模板渲染成html前调用**,即通常初始化某些属性值,然后再渲染成视图。这里:通过id什么的去查找页面元素是**找不到的**,created里面主要是**进行网络请求**

这里就会执行getLogs方法

 created(){
      this.getLogs()
    },

⑤watched

监听数据变化

⑥v-model数据双向绑定

当数据刷新时,UI视图刷新;当UI视图刷新时,数据可随之刷新。

在这里选择框select绑定了data中的selectWho,当UI中select选择框中更改时,selectWho也更更改了

使用vue2项目写一个页面,VUE,vue.js,前端,ui

 

(4)Element-UI介绍

主要是运用了其中的表单元素、下拉框元素、Layout布局(一行两个、一行三个)

①一行两个

利用el-row和el-col进行控制

 <el-row>
        <el-col span="12">
          <el-form-item label="课程学时" >
            <el-input v-model="form.classHour" autocomplete="off" />
          </el-form-item>
        </el-col>
        <el-col span="12">
          <el-form-item label="课程学分" >
            <el-input v-model="form.credit" autocomplete="off" />
          </el-form-item>
        </el-col>
      </el-row>

②一行三个

<el-row>
        <el-col span="8">
          <el-form-item label="学校"  >
            <el-select v-model="form.school" placeholder="请选择学校" @change="getBottomSchools" >
              <el-option v-for="item in schoolsFormData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col span="8">
          <el-form-item label="学院"  >
            <el-select v-model="form.organization" placeholder="请先选择学校,后选择学院" @change="getBottomOrgs">
              <el-option v-for="item in organizationsFormData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col span="8">
          <el-form-item label="系所"  >
            <el-select v-model="form.departmentName" placeholder="请先选择学院,后选择系所">
              <el-option v-for="item in departmentData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>

③下拉框

普通:其中label是显示在前端、vaule是传给后端的值

<el-select v-model="form.isOpen"  placeholder="选择是否公开" size="medium">
              <el-option label="公开" value="2" />
              <el-option label="不公开" value="1" />
            </el-select>

从数组中循环获得:

 <el-select v-model="form.school" placeholder="请选择学校" @change="getBottomSchools" >
              <el-option v-for="item in schoolsFormData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>

3.项目代码

<template>
  <div class="app-container">
    <el-form ref="form" style="width:80%" :model="form" label-width="120px" :rules="rules">
      <el-form-item label="课程名" >
        <el-input v-model="form.name" />
      </el-form-item>
      <el-row>
        <el-col span="12">
          <el-form-item label="课程开始时间" >
            <el-date-picker
                v-model="form.startDate"
                type="date"
                size="small"
                format="yyyy-MM-dd HH:mm:ss"
                value-format="yyyy-MM-dd HH:mm:ss"
                :picker-options="pickerOptionsBegin"
                placeholder="选择课程开始日期">
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col span="12">
          <el-form-item label="课程结束时间" >
            <el-date-picker
                v-model="form.endDate"
                type="date"
                size="small"
                format="yyyy-MM-dd HH:mm:ss"
                value-format="yyyy-MM-dd HH:mm:ss"
                :picker-options="pickerOptionsEnd"
                placeholder="选择课程结束日期">
            </el-date-picker>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col span="12">
          <el-form-item label="是否为公开课" >
            <el-select v-model="form.isOpen"  placeholder="选择是否公开" size="medium">
              <el-option label="公开" value="2" />
              <el-option label="不公开" value="1" />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col span="12">
          <el-form-item label="是否发布" >
            <el-select v-model="form.isPublish"  placeholder="选择是否发布">
              <el-option label="发布" value="1" />
              <el-option label="不发布" value="0" />
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col span="12">
          <el-form-item label="课程学时" >
            <el-input v-model="form.classHour" autocomplete="off" />
          </el-form-item>
        </el-col>
        <el-col span="12">
          <el-form-item label="课程学分" >
            <el-input v-model="form.credit" autocomplete="off" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col span="8">
          <el-form-item label="学校"  >
            <el-select v-model="form.school" placeholder="请选择学校" @change="getBottomSchools" >
              <el-option v-for="item in schoolsFormData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col span="8">
          <el-form-item label="学院"  >
            <el-select v-model="form.organization" placeholder="请先选择学校,后选择学院" @change="getBottomOrgs">
              <el-option v-for="item in organizationsFormData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col span="8">
          <el-form-item label="系所"  >
            <el-select v-model="form.departmentName" placeholder="请先选择学院,后选择系所">
              <el-option v-for="item in departmentData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-form-item label="课程简介" >
        <el-input type="textarea" :rows="4" v-model="form.introduction" autocomplete="off" />
      </el-form-item>
      <el-form-item>
        <el-button
          :loading="loading"
          type="primary"
          @click="onSubmit"
        >创建课程</el-button>
        <el-button @click="onCancel">清空信息</el-button>
      </el-form-item>
    </el-form>
  </div>



</template>

<script>
    export default {
        name: "index",
        data(){
            return {
                defalutForm: {},
                form: {
                    id:'',
                    name: '',
                    startDate: '',
                    endDate: '',
                    isOpen: '',
                    classHour: '',
                    credit:'',
                    introduction: '',
                    isPublish:'',
                    school:'',
                    organization: '',
                    departmentName: '', //系名称
                    department:''  //系组织id 后端需要
                },
                schoolsFormData:[],
                organizationsFormData:[],
                departmentData:[],
                loading: false, // skeleton的loading
                rules: {
                    name: [{ required: true, message: '请输入课程名', trigger: 'blur' }],
                },
            }
        },
        created(){
            this.getAllParentOrganizations()
        },
        computed: {
            pickerOptionsBegin() {
                return {
                    disabledDate: (time) => {
                        if (this.form.endDate) {
                            return   time.getTime() < Date.now() || time.getTime() > new Date(this.form.endDate).getTime();
                        }else{
                            return time.getTime() < Date.now() - 8.64e7
                        }
                    }
                }
            },
            pickerOptionsEnd() {
                return {
                    disabledDate: (time) => {
                        if(this.form.startDate){
                            return time.getTime() < new Date(this.form.startDate).getTime()
                        }else {
                            return time.getTime() < Date.now() - 8.64e7
                        }
                    }
                }
            },
        },
        methods:{
            getBottomSchools(item){
                //  console.log(item+"item")
                for (let i = 0; i < this.schoolsFormData.length; i++) {
                    if(item==this.schoolsFormData[i].name){
                        //  console.log("id"+this.organizationsFormData[i].id)
                        this.getAllBottomOrganizations(this.schoolsFormData[i].id)
                    }
                }
            },
            getBottomOrgs(item) {
                //  console.log(item+"item")
                for (let i = 0; i < this.organizationsFormData.length; i++) {
                    if(item==this.organizationsFormData[i].name){
                        //  console.log("id"+this.organizationsFormData[i].id)
                        this.getAllBottomDeps(this.organizationsFormData[i].id)
                    }
                }

            },
            getAllParentOrganizations(){
                this.$store.dispatch('organizationctrl/getAllParentOrganizations').then((res) => {
                    this.schoolsFormData = []
                    for (let i = 0; i < res.length; i++) {
                        const schoolFormObj = {}
                        schoolFormObj.id = res[i].id
                        schoolFormObj.name = res[i].name
                        schoolFormObj.parentId = res[i].parentId
                        schoolFormObj.introduction=res[i].introduction
                        this.schoolsFormData[i] = schoolFormObj
                    }
                })
            },
            getAllBottomOrganizations(parentID){
                this.$store.dispatch('organizationctrl/getAllBottomOrganizations',parentID).then((res) => {
                    this.organizationsFormData = []
                    for (let i = 0; i < res.length; i++) {
                        const organizationDataObj = {}
                        organizationDataObj.id = res[i].id
                        organizationDataObj.name = res[i].name
                        organizationDataObj.parentId = res[i].parentId
                        organizationDataObj.introduction=res[i].introduction
                        this.organizationsFormData[i] = organizationDataObj
                    }
                })
            },
            getAllBottomDeps(parentID){
                this.$store.dispatch('organizationctrl/getAllBottomOrganizations',parentID).then((res) => {
                    this.departmentData = []
                    for (let i = 0; i < res.length; i++) {
                        const departmentDataObj = {}
                        departmentDataObj.id = res[i].id
                        departmentDataObj.name = res[i].name
                        departmentDataObj.parentId = res[i].parentId
                        departmentDataObj.introduction=res[i].introduction
                        this.departmentData[i] =departmentDataObj
                    }
                })
            },
            onSubmit() {
                this.loading = true
                this.$store
                    .dispatch('coursectrl/addCourse',this.form)
                    .then(() => {
                        this.$message({
                            message: '已成功创建',
                            type: 'success'
                        })
                        this.loading = false
                    })
                    .catch((error) => {
                        this.loading = false
                        this.$message.error(error)
                    })
            },
            onCancel() {
                this.$confirm('确定要清空所有信息吗?', '提示', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning'
                }).then(() => {
                    this.form = JSON.parse(JSON.stringify(this.defalutForm))
                    this.$refs.form.clearValidate()
                }).catch(() => {
                    this.$message({
                        type: 'info',
                        message: '已取消'
                    })
                })
            }
        }
    }

</script>

 文章来源地址https://www.toymoban.com/news/detail-602595.html

到了这里,关于Vue2 +Element-ui实现前端页面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 菜鸟级:Vue Element-UI 前端 + Flask 后端 的登录页面验证码

    这里记录登录页面验证码的做法,采取的是前后端分离的做法,前端用Vue,后端用Flask 首先是GIF效果图: 后端返回的数据结构(base64字符串,response.data.img):   1、Vue前端页面基本采用Ruoyi Ui里面的登录页面代码,里面的一些方法进行重写; 首先是单个vue文件里网页内容

    2023年04月08日
    浏览(58)
  • Vue2.0+element-ui实现表格的增删查改

    vue2做了个表格的demo,有增删改查的功能,记录一下,喜欢就点个赞收藏一下吧~ 效果: 1.主文件list-page.vue 列表页 2.弹窗页面(新增/编辑公用一个弹窗页面)

    2024年02月10日
    浏览(51)
  • 【Vue框架】Vue2中element-ui/mint-ui组件库——element-ui引入组件以及使用案例、mint-ui引入组件及使用案例

    element-ui 提供了大量的组件,如:布局组件、表单组件、JS组件等等。 Element-ui官网: https://element.eleme.cn/#/zh-CN 安装 Element-ui: npm i element-ui -S 1.1.1 引入组件 引入 Element 完整引入(在 main.js 中写入以下内容): 按需引入 借助 babel-plugin-component,我们可以只引入需要的组件,以达到

    2024年02月07日
    浏览(56)
  • Vue2使用element-ui引入自定义主题的方法(使用在线主题生成工具)

    第一步 :按照官方文档使用npm安装element-ui,并完整引入Element-ui npm i element-ui -S  main.js中所有的内容删去,改为 随便写点东西,run一下 成功引入element-ui,但是不喜欢默认的蓝色,看起来很烂大街,想换掉。 第二步 :由于不喜欢默认的蓝色主题,可以使用在线主题生成工具

    2024年02月14日
    浏览(52)
  • 【vue2】element-ui el-transfer扩展 实现多列效果一对多

    vue2 el-transfer 穿梭框实现多类别 template 复制Transfer源码中的template,并拓展我们需要的列表2和button script 这里重写了Transfer的addToLeft方法,按着element-ui的逻辑写出第二个列表的逻辑即可。源码就不做解释了,这个组件比较简单,感兴趣的朋友可以去看看 style GitHub地址

    2024年02月08日
    浏览(63)
  • vue2实现可拖拽甘特图(结合element-ui的gantt图)

      接到公司需求,要做一个可拖拽的甘特图来实现排期需求,官方的插件要付费还没有中文的官方文档可以看,就去找了各种开源的demo来看,功能上都不是很齐全,于是总结了很多demo,合在一起组成了一版较为完整的满足需求的甘特图。 1.拖拽  拖拽功能是甘特图的主要功

    2024年02月03日
    浏览(50)
  • 78.(前端)分配权限页面显示——树形结构使用(Element-ui的Tree树形控件)

    在前端的操作中,应该增加修改、删除、分配权限的操作 这次主要是实现分配权限的显示!!!!!! 更换icon图标,并设计大小 绑定函数,点击弹出提示框(DIalog对话框) 在对话框内,应该显示一个树形结构提供选择(Tree树形控件) 初始化树形结构,并填充数据

    2024年02月05日
    浏览(62)
  • vue搭配element-ui前端实现表格分页

    如果不从后台请求数据,那么就需要在前端手动管理数据。可以使用以下步骤实现该功能: 在 Vue 组件的 data 中定义一个数组来存放所有数据(不分页)。 在 mounted 钩子函数中,手动获取数据并存放到上一步定义的数组中。 在模板中使用 element-ui 的表格组件来展示数据,同

    2024年02月11日
    浏览(44)
  • vue2+element-ui使用vue-i18n进行国际化的多语言/国际化

    注意:vue2.0要用8版本的,使用9版本的会报错 在src目录下,创建新的文件夹,命名为i18n zh.js en.js index.js main.js 使用方式一 效果图 使用方式二 效果图 使用方式三,在 效果图 ` 注意:这种方式存在更新this.$i18n.locale的值时无法自动切换的问题,需要刷新页面才能切换语言。解

    2024年02月07日
    浏览(73)
  • 基于vue-cli创建后台管理系统前端页面——element-ui,axios,跨域配置,布局初步,导航栏

    1.vue-cli创建前端工程,安装element-ui,axios和配置; 2.前端跨域的配置,请求添加Jwt的设置; 3.进行初始化布局,引入新增页面的方式; 4.home页面导航栏的设置,一级目录,二级目录; 安装成功 布局初步 1.vue-cli创建前端工程,安装element-ui,axios和配置; 2.前端跨域的配置,请

    2024年02月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包