【前端】vue学习5 : vue + ElementUI

vue+elementUI 项目搭建


命令行需要管理员权限。
根据之前创建vue-cli项目一样再来一遍 创建项目。
1、创建一个名为 hello-vue 的工程 vue init webpack vue-element

D:\IdeaProjects\vue>vue init webpack vue-element
‘git’ �����
? Project name vue-element
? Project description 回车
? Author 作者名
? Vue build standalone
? Install vue-router? No
? 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) npm


2、安装依赖,我们需要安装 vue-router、element-ui、sass-loader 和 node-sass 四个插件。

# 进入工程目录
cd vue-element
# 安装 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	

3、创建成功后用idea打开,并删除净东西 创建views和router文件夹用来存放视图和路由
在这里插入图片描述


4、在views创建Main.vue
Main.vue

<template>
<h1>首页</h1>
</template><script>export default {name: "Main"}
</script><style scoped>
</style>

5、views中创建Login.vue视图组件
Login.vue(用的饿了么UI中的代码)

<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-dialogtitle="温馨提示":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");} 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>

6、创建路由,在 router 目录下创建一个名为 index.js 的 vue-router 路由配置文件
index.js

import Vue from 'vue'
import Router from "vue-router"import Main from '../views/Main'
import Login from '../views/Login'
Vue.use(Router);export default new Router({routes:[{path:'/Main',component:Main},{path:'/Login',component:Login}]
});

7、在main.js中配置相关
main.js main.js是index.html调用的 所以基本上所有东西都导出到这
一定不要忘记扫描路由配置并将其用到new Vue中

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import Element from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.config.productionTip = falseVue.use(router);
Vue.use(Element);/* eslint-disable no-new */
new Vue({el: '#app',router,render: h => h(App)
})

8. 在App.vue中配置显示视图
App.vue

<template><div id="app"><router-link to="/Main">main</router-link><router-link to="/Login">Login</router-link><router-view></router-view></div>
</template><script>
export default {name: 'App',
}
</script><style>
#app {font-family: 'Avenir', Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>

9、最后效果

在这里插入图片描述


图 vue+elementUI实战效果图
测试:在浏览器打开 http://localhost:8081/#/Login
如果出现错误: 可能是因为sass-loader的版本过高导致的编译错误,当前最高版本是8.0.2,需要退回到7.3.1 ;
去package.json文件里面的 "sass-loader"的版本更换成7.3.1,然后重新cnpm install就可以了;然后npm run dev 即可启动项目。


路由嵌套

嵌套路由又称子路由,在实际应用中,通常由多层嵌套的组件组合而成。

1、 创建用户信息组件,在 views/user 目录下创建一个名为 Profile.vue 的视图组件;
Profile.vue

<template><h1>个人信息</h1>
</template><script>export default {name: "UserProfile"}
</script><style scoped></style>

2、在用户列表组件在 views/user 目录下创建一个名为 List.vue 的视图组件;
List.vue

<template><h1>用户列表</h1>
</template><script>export default {name: "UserList"}
</script><style scoped></style>

3、 修改首页视图,我们修改 Main.vue 视图组件,此处使用了 ElementUI 布局容器组件,代码如下:
Main.vue

<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-link to="/user/profile">个人信息</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-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></el-dropdown></el-header><el-main><!--在这里展示视图--><router-view /></el-main></el-container></el-container></div>
</template>
<script>export default {name: "Main"}
</script>
<style scoped lang="scss">.el-header {background-color: pink;color: #333;line-height: 60px;}.el-aside {color: #333333;}
</style>

4、 配置嵌套路由修改 router 目录下的 index.js 路由配置文件,使用children放入main中写入子模块,代码如下
index.js

import Vue from 'vue'
import Router from "vue-router"import Main from '../views/Main'
import Login from '../views/Login'import UserList from '../views/user/List'
import UserProfile from '../views/user/Profile'Vue.use(Router);export default new Router({routes:[{path:'/Main',component:Main,children:[{path:'/user/profile',component:UserProfile},{path:'/user/list',component:UserList}]},{path:'/Login',component:Login}]
});

5、 路由嵌套实战效果图
在这里插入图片描述


参数传递

  • 这里演示如果请求带有参数该怎么传递

第一种取值方式

1、 修改路由配置, 主要是router下的index.js中的 path 属性中增加了 :id 这样的占位符

/src/router/index.js

{path: '/user/profile/:id', name:'UserProfile', component: UserProfile
}

2、传递参数
此时我们在Main.vue中的route-link位置处 to 改为了 :to,是为了将这一属性当成对象使用,注意 router-link 中的 name 属性名称 一定要和 路由中的 name 属性名称 匹配,因为这样 Vue 才能找到对应的路由路径;

Main.vue 部分代码

<!--name是组件的名字 params是传的参数 如果要传参数的话就需要用v:bind:来绑定-->
<router-link :to="{name:'UserProfile',params:{id:31}}">个人信息</router-link>

3、在要展示的组件Profile.vue中接收参数 使用 {{$route.params.id}}来接收
Profile.vue 部分代码

<template><!--  所有的元素必须在根节点下--><div><h1>个人信息</h1>{{$route.params.id}}</div>
</template>

第二种取值方式 使用props 减少耦合

1、修改路由配置 , 主要在router下的index.js中的路由属性中增加了 props: true 属性,跳转到哪个component,就去对应的component接收属性

{path: '/user/profile/:id', name:'UserProfile', component: UserProfile, props: true
}

2、与第一种方式一样。 在Main.vue中修改route-link地址

<!--name是组件的名字 params是传的参数 如果要传参数的话就需要用v:bind:来绑定-->
<router-link :to="{name:'UserProfile',params:{id:1}}">个人信息</router-link>

3、在Profile.vue接收参数为目标组件增加 props 属性
Profile.vue
使用方式不同、props接收

<template><div><h1>个人信息</h1><h2>传递的id:{{id}}</h2></div>
</template><script>export default {name: "UserProfile",props:['id']}
</script><style scoped></style>

效果图
在这里插入图片描述


实例:登录传递用户名

Login.vue 请求

this.$router.push("/main");
更改为以下
this.$router.push("/main/"+this.form.username);

在这里插入图片描述


组件重定向

Vue 中的重定向是作用在路径不同但组件相同的情况下。
router/index.js中添加即可。

   {path:'/goHome',redirect:'/'}

App.vue ,添加一个路由路径,请求/goHome,然后被重定向到/ ,即。localhost:8080

<template><div id="app"><router-link to="/Main">main</router-link><router-link to="/Login">Login</router-link><router-link to="/goHome">goHome</router-link><router-view></router-view></div>
</template>

路由模式与 404

路由模式

路由模式有两种

  • hash:路径带 # 符号,如 http://localhost/#/login
  • history:路径不带 # 符号,如 http://localhost/login

router/index.js 中修改路由配置,代码如下:

export default new Router({mode: 'history',routes: []
});

在这里插入图片描述


404

1.创建一个NotFound.vue视图组件
NotFound.vue

<template>
<div><h1>404啦,找不到页面啦!!!</h1>
</div>
</template>
<script>export default {name: "NotFound"}
</script><style scoped></style>

2.修改路由配置index.js

import NotFound from '../views/NotFound'...
添加一个路由配置
{path: '*',component: NotFound
}

3.效果图

在这里插入图片描述


路由钩子与异步请求

beforeRouteEnter:在进入路由前执行
beforeRouteLeave:在离开路由前执行

在Profile.vue中写

<script>export default {name: "UserProfile",props:['id'],beforeRouteEnter:(to,from,next)=>{//进入之前console.log("进入路由之前");next();},beforeRouteLeave:(to,from,next)=>{//进入之后console.log("进入路由之后");next();}}
</script>

参数说明:

  • to:路由将要跳转的路径信息
  • from:路径跳转前的路径信息
  • next:路由的控制参数
    • next() 跳入下一个页面
    • next(’/path’) 改变路由的跳转方向,使其跳到另一个路由
    • next(false) 返回原来的页面
    • next((vm)=>{}) 仅在 beforeRouteEnter 中可用,vm 是组件实例

在钩子函数中使用异步请求

1、安装 Axios

cnpm install --save vue-axios

2、main.js引用 Axios

import axios from 'axios'
import VueAxios from 'vue-axios'
Vue.use(VueAxios, axios)

3、准备数据 : 只有我们的 static 目录下的文件是可以被访问到的,所以我们就把静态文件放入该目录下。
数据和之前用的json数据一样 需要的去上述axios例子里

// 静态数据存放的位置
static/mock/data.json

4.在 beforeRouteEnter 中进行异步请求
Profile.vue

<template><div><h2>传递的json:{{info}}</h2></div>
</template><script>export default {name: "UserProfile",props: ['id','info'],//接收infobeforeRouteEnter: (to, from, next) => {//进入之前console.log("进入路由之前");next(vm => {vm.getData();});},beforeRouteLeave: (to, from, next) => {//进入之后console.log("进入路由之后");next();},methods: {getData: function () {//链式编程。this.axios.get('http://localhost:8080/static/mock/data.json').then(result => (this.info = result.data));}}}
</script><style scoped></style>

  • 非链式的axios
    methods: {getData: function () {this.axios({method: 'get',url: 'http://localhost:8080/static/mock/data.json'}).then(function (response) {console.log(response)})}}

5.路由钩子和axios结合图

在这里插入图片描述

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/45545.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解Window和WindowManager(一)

理解Window和WindowManager(一) Window是一个抽象类,它的具体实现是PhoneWindow,创建一个WindowManager就可以创建一个Window&#xff0c; Window的具体实现位于WindowManagerService中,WindowManager和WindowManagerService是一个IPC过程 为什么使用Window 首先就是Window…

最牛最全的 Postman 实现 API 自动化测试教程

【 文章末尾给大家留下了大量的福利】 背景介绍 相信大部分开发人员和测试人员对 postman 都十分熟悉&#xff0c;对于开发人员和测试人员而言&#xff0c;使用 postman 来编写和保存测试用例会是一种比较方便和熟悉的方式。但 postman 本身是一个图形化软件&#xff0c;相对较…

Python自动化办公文章,开放下载共97页PDF

发现很多读者对python自动化办公&#xff08;python操作Excel、Word、PDF、PPT&#xff09;的文章都很喜欢&#xff0c;并希望能够应用到工作中去。 因此&#xff0c;我直接写了一个文档《python自动化办公系列文章》供大家学习参考&#xff0c;已经整理成册(如下图所示)&…

RPA、低代码、流程挖掘纷纷引入生成式AI,超自动化迎来LLM时代

3月7日&#xff0c;有个名为Kognitos智能RPA厂商拿到了675万美元融资&#xff0c;自送绰号“生成式AI自动化”先驱。其主要业务&#xff0c;是提供类似ChatGPT的对话式功能&#xff0c;为客户提供更人性化的智能自动化服务。 对于Kognitos的绰号&#xff0c;业内人士看后呵呵一…

Win10、Win11跳过联网注册微软账户激活方法

第一次开机之后&#xff0c;跳过前面两个设置&#xff0c;我们来到联网界面&#xff0c;和win10不同的是&#xff0c;这个界面并没有预设跳过的按钮&#xff0c;开机重启也无法直接跳过这个步骤&#xff0c;所以需要通过特殊方式避过这个环节。大家可以先尝试使用下面的方法&am…

Android中水波纹效果的快速实现及使用

背景xml布局background属性资源文件代码实现foreground属性资源文件代码实现效果展示扩展使用及注意事项 背景 Android 5.0 以上引入了控件点击的水波纹效果&#xff0c;为了用户体验和相关需求需要。下面我们来一起实现。提前告知一下&#xff0c;实现起来相对是简单的&#…

手把手教你画一个 逼格满满圆形水波纹loadingview Android

才没有完结呢o(&#xffe3;︶&#xffe3;)n 。大家好&#xff0c;这里是番外篇。 拜读了爱哥的博客&#xff0c;又学到不少东西。爱哥曾经说过&#xff1a; 要站在巨人的丁丁上。 那么今天&#xff0c;我们就站在爱哥的丁丁上来学习制作一款自定义view&#xff08;开个玩笑&…

图像处理水波纹效果

总结起来就是将水波圆周从0-R逐渐扩大并逐帧显示。在扩大的同时赋予该像素点波动函数和能量递减的变换。颜色就是对像素点四个方向取整&#xff08;色彩邻域&#xff09;&#xff0c;取权值相乘&#xff0c;最后赋予回给该点。 可以随机自动选择涟漪生成点的圆心&#xff0c;涟…

css实现水波纹

携手创作&#xff0c;共同成长&#xff01;这是我参与「掘金日新计划 8 月更文挑战」的第23天&#xff0c;点击查看活动详情 ui设计的元素有时候需要有一些动画效果&#xff0c;可以直接用css动画来实现。 实现一个中心圆向四周有水波纹的效果 利用定位添加多个圆&#xff0…

Android 按钮实现按压水波纹效果

博主前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住也分享一下给大家&#xff0c; &#x1f449;点击跳转到网站 方法一&#xff1a; 在控件中加入android:foreground"?selectableItemBackground" 即可实现水…

Android 水波纹效果

今天翻看博客&#xff0c;发现了水波纹效果。顺便研究了一下 一&#xff0c;Touch Feedback&#xff08;触摸反馈&#xff09; 1&#xff0c;原始自带效果 代码&#xff1a; <Buttonandroid:layout_width"wrap_content"android:layout_height"100dp"an…

Echarts之球形水波纹

球形水波纹是比较与饼图展现方式 更灵动 更高级的一种 echarts-liquidfill 水球图插件官网: https://www.npmjs.com/package/echarts-liquidfill 1.展示图&#xff1a;【左侧即为水波图&#xff0c;右侧是想要展示的信息列】 2.实现过程 ①、 需要下载echarts及liquidfill 插…

Android实现水波纹外扩效果

微信曾经推出了一个查找附近好友的功能&#xff0c;大致功能是这样的&#xff1a;屏幕上有一个按钮&#xff0c;长按按钮的时候&#xff0c;会有一圈圈水波纹的动画向外扩散&#xff0c;松手后&#xff0c;动画结束。 现在简单来实现这样的一个动画功能&#xff1a; 思路: 主…

Android 实现水波纹效果

效果图 attrs.xml 自定义属性 <declare-styleable name"RippleAnimationView"><attr name"ripple_anim_color" format"color" /><!-- 水波纹填充类型 --><attr name"ripple_anim_type" format"enum&q…

Android案例手册 - 定位点圆形水波纹和椭圆水波纹

往期文章分享 点击跳转>《导航贴》- Unity手册&#xff0c;系统实战学习点击跳转>《导航贴》- Android手册&#xff0c;重温移动开发 本文约18千字&#xff0c;新手阅读需要18分钟&#xff0c;复习需要6分钟 【收藏随时查阅不再迷路】 &#x1f449;关于作者 众所周知&am…

聊聊Android5.0中的水波纹效果

水波纹效果已经不是什么稀罕的东西了&#xff0c;用过5.0新控件的小伙伴都知道这个效果&#xff0c;可是如果使用一个TextView或者Button或者其它普通控件的话&#xff0c;你是否知道如何给它设置水波纹效果呢&#xff1f;OK&#xff0c;我们今天就来看看这个水波纹效果的实现。…

Android开发中的水波纹效果实现

编写不易&#xff0c;如有转载&#xff0c;请声明出处&#xff1a;http://blog.csdn.net/zxc514257857/article/details/73200900 前言 android中的水波纹效果是5.0以后即API Level 21以后出现的&#xff0c;因此minSdkVersion必须设置在21及以上才可以使用此效果 Demo效果展示…

Android点击水波纹扩散效果整理(附带一个自定义的水波纹效果控件)

很久很久没有写博客了&#xff0c;说来也有点惭愧。正好最近整理自己的项目工程目录&#xff0c;看到一些值得分享的控件&#xff0c;准备在之后的几篇博客中准备把它们陆续搬运上来。 这篇博客准备整理一下Android Material Design自带的点击水波纹扩散的效果。话不多说&#…

android 按钮水波纹效果【背景色】

两种方式实现&#xff1a; 第一种&#xff1a;Material自带水波纹 通过如下代码设置波纹的背景&#xff1a; android:background"?android:attr/selectableItemBackground"波纹有边界【一般这种好看点&#xff0c;大多数也都是这种】 android:foreground"?…

Android 水波纹扩散效果

项目地址下载&#xff1a;https://github.com/LiuJunb/RippleImageView 1.效果图&#xff1a; 2.使用方法&#xff1a; 在xml里使用RippleImageView自定义控件&#xff1a; xmlns:app"http://schemas.android.com/apk/res-auto"<com.army.rippleimage.RippleIma…