Vue + elementUI(个人使用)

目录结构:

在这里插入图片描述

router文件夹下存放着路由的信息

views文件夹下存放着视图的组件

components文件夹下存放着功能性组件

static文件夹下存放着静态的文件,与后端框架一致

App.vue:vue项目的默认组件,最主要的还是路由的视图的展示

index.html:一般没有任何的改动 ,首页显示的功能

正文:

1.创建项目

初始化:

vue init webpack myvue

进入工程文件夹

cd myvue

安装 vue-router(添加到项目中)

npm install vue-router --save-dev

安装 element-ui

npm i element-ui -S

安装项目中所需的依赖

npm install

安装 SASS 加载器

cnpm install sass-loader node-sass --save-dev

启动测试

npm run dev	

进入主要流程
index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>study-vue</title>
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

App.vue

<template>
  <div id="app">
    <!-- 只有有这句话时,路由从这个界面跳转才能生效-->
    <!-- 展示路由跳转的视图-->
    <router-view></router-view>
  </div>
</template>

<script>

export default {
  name: 'App'
}
</script>

main.js :vue对象的所在位置,配置vue对象,如果有其他核心组件,则需要通过Vue.use使用

import Vue from 'vue'
import App from './App'
//扫描路由配置
import router from './router'

//导入axios
import axios from 'axios'
import VueAxios from 'vue-axios'

Vue.use(VueAxios, axios)


//导入elementUI
import ElementUI from "element-ui"
//导入element css
import 'element-ui/lib/theme-chalk/index.css'


Vue.use(router);
Vue.use(ElementUI);


new Vue({
  el: '#app',
  router,
  render: h => h(App),//ElementUI规定这样使用
})

自定义的视图组件
登录界面(使用elementUI):

<template>
  <div>
    <el-form ref="loginForm" :model="form" :rules="rules" label-width="80px" class="login-box">
      <h3 class="login-title">欢迎登录</h3>
      <el-form-item label="账号" prop="username">
        <el-input type="text" placeholder="请输入账号" v-model="form.username"/>
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-input type="password" placeholder="请输入密码" v-model="form.password"/>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" v-on:click="onSubmit('loginForm')">登录</el-button>
      </el-form-item>
    </el-form>

    <el-dialog
      title="温馨提示"
      :visible.sync="dialogVisible"
      width="30%"
      :before-close="handleClose">
      <span>请输入账号和密码</span>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>
export default {
  name: "Login",
  data() {
    return {
      form: {
        username: '',
        password: ''
      },

      // 表单验证,需要在 el-form-item 元素中增加 prop 属性
      rules: {
        username: [
          {required: true, message: '账号不可为空', trigger: 'blur'}
        ],
        password: [
          {required: true, message: '密码不可为空', trigger: 'blur'}
        ]
      },

      // 对话框显示和隐藏
      dialogVisible: false
    }
  },
  methods: {
    onSubmit(formName) {
      // 为表单绑定验证功能
      this.$refs[formName].validate((valid) => {
        if (valid) {
          // 使用 vue-router 路由到指定页面,该方式称之为编程式导航
          this.$router.push("/main/" + this.form.username);
        } else {
          this.dialogVisible = true;
          return false;
        }
      });
    }
  }
}
</script>

<style lang="scss" scoped>
.login-box {
  border: 1px solid #DCDFE6;
  width: 350px;
  margin: 180px auto;
  padding: 35px 35px 15px 35px;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  box-shadow: 0 0 25px #909399;
}

.login-title {
  text-align: center;
  margin: 0 auto 40px auto;
  color: #303133;
}
</style>

主界面组件:

<template>
  <div>
    <el-container>
      <el-aside width="200px">
        <el-menu :default-openeds="['1']">
          <el-submenu index="1">
            <template slot="title"><i class="el-icon-caret-right"></i>用户管理</template>
            <el-menu-item-group>
              <el-menu-item index="1-1">
                <!--插入的地方-->
                <!-- 通过router对象完成参数的传递-->
                <!-- 这里参数的传递不能通过path属性:因为path属性表示的传递的地址,
                参数通过get方法获得,如果在这里修改了path,会以为参数是后缀-->
                <!-- name:表示为route对象的名字,通过params传递参数  -->
                <!-- 这里的: 表示为 v-bind:绑定对象的值,route对象的名字为UserProfile,其对象的属性为ID=1-->
                <router-link :to="{name:'UserProfile', params:{id: 1}}">个人信息</router-link>
              </el-menu-item>
              <el-menu-item index="1-2">
                <!--插入的地方-->
                <router-link to="/user/list">用户列表</router-link>
              </el-menu-item>
            </el-menu-item-group>
          </el-submenu>
          <el-submenu index="2">
            <template slot="title"><i class="el-icon-caret-right"></i>内容管理</template>
            <el-menu-item-group>
              <el-menu-item index="2-1">分类管理</el-menu-item>
              <el-menu-item index="2-2">内容列表</el-menu-item>
            </el-menu-item-group>
          </el-submenu>
          <el-submenu index="3">
            <template slot="title"><i class="el-icon-caret-right"></i>系统管理</template>
            <el-menu-item-group>
              <el-menu-item index="3-1">用户设置</el-menu-item>
              <el-menu-item index="3-2">用户信息</el-menu-item>
            </el-menu-item-group>
          </el-submenu>
          <el-submenu index="4">
            <template slot="title"><i class="el-icon-caret-right"></i>重回首页</template>
            <el-menu-item-group>
              <el-menu-item index="4-1">
                <!--插入的地方-->
                <router-link to="/goHome">首页</router-link>
              </el-menu-item>
            </el-menu-item-group>
          </el-submenu>
        </el-menu>
      </el-aside>

      <el-container>
        <el-header style="text-align: right; font-size: 12px">
          <el-dropdown>
            <i class="el-icon-setting" style="margin-right: 15px"></i>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item>个人信息</el-dropdown-item>
              <el-dropdown-item>退出登录</el-dropdown-item>
            </el-dropdown-menu>
            <span>{{username}}</span>
          </el-dropdown>
        </el-header>
        <el-main>
          <!--在这里展示视图-->
          <router-view />
        </el-main>
      </el-container>
    </el-container>
  </div>
</template>
<script>
export default {
  props: ['username'],
  name: "Main"
}
</script>
<style scoped lang="scss">
.el-header {
  background-color: #16a7a7;
  color: #333333;
  line-height: 60px;
}
.el-aside {
  color: #333;
}
</style>

NotFound组件

<template>
  <div>
    <h1>404,你的页面走丢了</h1>
  </div>
</template>

<script>
export default {
  name: "NotFound"
}
</script>

<style scoped>

</style>

用户信息界面
List.vue

<template>
  <h1>用户列表</h1>
</template>

<script>
export default {
  name: "UserList"
}
</script>

<style scoped>

</style>

Profile.vue

<template>
  <!-- template标签下所有的元素,必须都不能在根节点下-->
  <div>
    <h1>个人信息</h1>
    <!-- 拿到通过route传递的参数-->
    <!-- $符号表示取对象 -->
<!--    {{$route.params.id}}-->

    {{info.name}}
  </div>
</template>

<script>
      //这个name是组件导出的名字
      export default {
        //通过route对象的props属性设置为true,完成属性的自动绑定
        props:['id'],
        name: "UserProfile",


        // ()=>{} 这个符号等价于function(){}

            //现在要实现进入这个界面前,加载数据
            beforeRouteEnter: (to, from, next)=>{
               // 与拦截器效果一致 to:路径将要跳转的信息 from:路径跳转前的信息 next:表示的是下一个元素,chain链
               // 进入路由之前的过滤
                console.log("进入路由之前");
                //next()往下进行,不然无法执行
                //next('/path'):指定接下载跳转到哪个界面
                //next(false):返回原来的界面
              next(vm => {
                vm.getData(); //进入路由之前执行getData方法
              });
            },
        //进入路由之后的过滤
        beforeRouteLeave: (to, from, next)=>{
            console.log("离开路由之后")
            next();
        },
        methods: {
          getData: function (){
              this.axios({
                method: "get",
                url: "http://localhost:8080/static/mock/data.json"
              }).then(function (response){
                console.log(response);
              })
          }
        },
        data(){
          //return 返回的是一个json格式
          return{
            // 请求的返回参数格式,必须和json字符串一样
            info:{
              name:null,
              address:{
                street: null,
                city: null,
                country: null,
              },
              url:null
            }
          }
        },
        //mounted钩子函数,用于数据挂载后使用
        mounted(){ //钩子函数 链式编程 ES6新特性
          //get表示请求的地址,then(response)表示得到返回的结果 =>指向调用结果后产生的事情
          this.axios.get('http://localhost:8080/static/mock/data.json').then(response=>(this.info=response.data));
        }

      }
</script>

<style scoped>

</style>

核心 路由的转发:
路由的配置文件默认为index.js

import Vue from "vue";
import Router from "vue-router";

import Main from "../views/Main";
import Login from "../views/Login";

import UserProfile from "../views/user/Profile";
import UserList from "../views/user/List"
import NotFound from "../views/NotFound";


Vue.use(Router);


export default new Router({
  //用histroy则不带#
  mode: 'history',
  routes: [
    {
      //通过
      path: '/main/:username',
      component: Main,
      props: true,
      //嵌套路由
      //path: '地址';通过/:绑定一个id
      children: [
        //通过restFul风格进行绑定
        ///如果传递两个参数(id,name)则需要 /user/profile/:id/:name
        {path: '/user/profile/:id',
          name: 'UserProfile',
          component: UserProfile,
          //props的作用:开启后可以自动绑定组件中的props中的名字相同的值
          props: true
        },
        {path: '/user/list',
          name: 'UserList',
          component: UserList
        },
        {//重定向
          path: '/goHome',
          redirect: '/main'
        }
      ]
    },
    {
      path: '/login',
      component: Login
    },
    {
      //*的意思是如果匹配不到,则走这个地址
      path: '*',
      component: NotFound
    }
  ]
})

数据,因为是前端项目,所有直接存放了一个json数据,直接拿到

在这里插入图片描述

原文地址:https://blog.csdn.net/qq_43062104/article/details/112860415

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


el-menu 有个属性 :default-active="curActive"  el-menu-item有个属性:index=“home”这2个属性值对上号就自动定位了data(){ return{ curActive:"home" }; },
基础用法1<el-inputv-model="input1"palcehoder="请输入"></el-input>23varMain={4data(){5return{6input1:''7}8}9}10varCtor=Vue.extend(Main)11newCtor().$mount('#app&#03
 1.安装element-uinpminstallelement-ui-S 2.在main.js中importElementUIfrom'element-ui'import'element-ui/libheme-chalk/index.css'Vue.use(ElementUI)注意index.css的路径不要出错:在node_modules文件夹里node_modules\element-ui\lib\theme-c
layout布局通过基础的24分栏,可进行快速布局基础布局使用单一分栏创建基础的栅格布局,通过span属性指定每栏的大小<el-col:span="8"></el-col>1<el-row>2<el-col:span="8"><divclass="grid-contentbg-purple"></div>&
 今天做一个选择年份的功能,直接调用了ElementUI里面的DatePicker组件,官网上有该组件的用法介绍,讲得很清楚。 我的代码: 官网说明: 奇怪的事情发生了,我明明按照例子写了  value-format="yyyy" 可是获得的值却一直还是Date对象 仔细检查后,我突然发现我的v-model
  that.end 即为结束日期
vueelementUitree懒加载使用详情2018年11月21日11:17:04开心大表哥阅读数:3513 https://blog.csdn.net/a419419/article/details/84315751 背景:vue下使用elementUI文档:http://element-cn.eleme.io/#/zh-CN/componentree#tree-shu-xing-kong-jian需求:只保存二
环境搭建说明:1、全局安装angluar脚手架npminstall-g@angular/cli2、初始化项目(支持scss)ngnew项目名称--style=scss//进入项目cd项目名称运行代码可以是:serve或者npminstall(安装依赖)npmstart(运行)3、安装elementnpm
1、在写埋点监控项目的时候,需求是表格里面的数据后台传递过来为0,但是要求显示的时候为—,在elementUI判断,将prop去掉在下面加上<templateslot-scope="scope"><emplate>里面在写vue的判断,因为通过Scopedslot可以获取到row,column,$index和store(table内容的状态管理)的数据。2、
<el-table-columnprop="pubArea"//表格data中对应的字段column-key="pubArea"//过滤条件变化时根据此key判断是哪个表头的过滤label="报修类型"align="center"width=
1.npminstallbabel-plugin-component-D   然后.babelrc替换plugins 文件就在根目录下  2.组件中英文及自定义中英文importVueI18nfrom'vue-i18n'importenLocalefrom'element-ui/lib/locale/lang/en'importzhLocalefrom'element-ui/lib/locale/lang/zh-C
 <el-treeref="tree":data="menu.treeData":props="menu.defaultProps":filter-node-method="filterNode":expand-on-click-node=&quot
2019独角兽企业重金招聘Python工程师标准>>>使用vue+elementui的tree组件,elementui官网elementui的tree组件问题描述:tree层级过多时左右不可滚动问题解决:修改overflow属性值.el-tree-node>.el-tree-node_children{overflow:visible;} 其他相关链接:css--ov
首先elementUI的导航栏中的选中项的高亮显示时的字体颜色可以在属性中设置,但是高亮时的背景颜色不能设置,所以要自己修改高亮的背景颜色.el-menu-item.is-active{background-color:#00b4aa!important;} 在使用elementUI构建vue项目的时候会遇到页面刷新的时候子路由会保
1.首先创建Vue项目(使用vue-cli进行创建)创建项目文章指导地址: https://blog.csdn.net/assiduous_me/article/details/892086492.ElementUI:一套为开发者、设计师和产品经理准备的基于Vue2.0的桌面端组件库 链接地址:http://element.eleme.io/#/zh-CN3.正式开
使用vue开发项目,用到elementUI,根据官网的写法,我们可以自定义主题来适应我们的项目要求,下面来介绍一下两种方法实现的具体步骤,(可以参考官方文档自定义主题官方文档),先说项目中没有使用scss编写,用主题工具的方法(使用的较多)第一种方法:使用命令行主题工具使用vue-cli安装完项目并引
每页显示的序号都是一样的:<el-table:data="tableData"highlight-current-row@current-change="handleCurrentChange"><el-table-columntype="index"width="50"></el-table-column><el-table>根据
  记录一下自己踩的坑,控制element内的table的某列显示隐藏不能用v-show,而是要用v-if具体网上百度了,看一下v-show和v-if的区别吧猜测:由于el-table-column会生成多行标签元素,根据v-show是不支持template语法的,推断v-show不能显示隐藏多个元素 
样式重置单vue文件中重置全局重置多写一个style不加scrop,可能会影响全局样式待补充table单价数量小计3252?在ElementUI中,我需要获取row内的数据并进行计算,需要用到v-slot<el-table-columnlabel="小计"><templatev-slot="scope">{{scop
工作需要做一个带滑块效果的导航栏,初步想法是用element的导航组件去做,后面摸坑结合各位大佬的博客初步实现效果,话不多说,直接上代码,记录一下爬坑之旅1<template>2<divclass="y-nav">3<el-rowclass="nav">4<el-menu5:default-active="$route.