| 使用框架 | element+vue |
|---|---|
| 教程链接 | https://www.bilibili.com/video/BV1cf4y1j7hL?p=439 |
项目创建与启动
项目创建
- 在需要的位置创文件夹,文件夹右键,进入vscode。
- 在终端中运行vue create 项目名称
- 选取配置,自定义,选择babel、router和使用配置文件,回车即可
配置element-ui
安装npm i element-ui -S
我按需引入的时候忘记配置,所以报下面的错
element-ui按需引入报错 Error: Cannot find module ‘babel-preset-es2015’
解决方法一
npm install babel-plugin-component -D
然后,将\node_modules*babel-plugin-dynamic-import-node*.babelrc中的内容替换成官方文档中的内容
{"presets": [["es2015", { "modules": false }]],"plugins": [["component",{"libraryName": "element-ui","styleLibraryName": "theme-chalk"}]]}
解决方法二
直接在 babel.config.js 中添加即可:
module.exports = {presets: ['@vue/app'],//以下是添加的内容plugins: [["component",{"libraryName": "element-ui","styleLibraryName": "theme-chalk"}]]//以上是添加内容}
终于启动了,然后路由又报错了
Cannot read property ‘matched’ of undefined”
原因在于引入element的时候,粘贴了如下代码,而这个里面的需要加router
new Vue({el: '#app',render: h => h(App)});
因为默认的项目模板中有传值的案例,所以分析一下组件之间的传值,以下是示例页面。
父子组件之间传参
父组件中放了子组件的传参
app.vue是根组件,由这个组件定义哪个路径可以到哪个组件页面
这个方法适用于在父组件中放了一个子组件的例子,比如在home.vue中放了一个<HelloWorld/> <HelloWorld> 子组件
app.vue根组件<template><div id="app"><div id="nav"><router-link to="/">Home</router-link> //nav中的链接home到home组件<router-link to="/about">About</router-link> //about到about组件</div><router-view/></div></template>
home.vue父组件<template><div class="home"><img alt="Vue logo" src="../assets/logo.png"><HelloWorld msg="Welcome to Your Vue.js App"/>//home组件中插入了一个子组件helloword,传递了一个msg</div></template><script>// @ is an alias to /srcimport HelloWorld from '@/components/HelloWorld.vue' //先导入子组件export default {name: 'Home',components: {HelloWorld //这里定义了子组件}}</script>
helloworld.vue子组件<template><div class="hello"><h1>{{ msg }}</h1>//然后就可以使用</div></template><script>export default {name: 'HelloWorld',props: {msg: String //子组件里面先在这里接收}}</script>
如何进行父子组件传参
父组件中
//v-for循环的时候,定义了index<el-menuv-for="(item,index) in positionlist":key='index'default-active="0"@select='choose'class="width">//所以只需要在点击的时候,把index传给函数,并在函数中将index保存到data中即可,这里定义为了selectedindex<el-menu-item><span slot="title"><router-link to="/position" @click.native="logindex(index)">{{item.position}}</router-link></span></el-menu-item></el-menu>//需要显示的地方,放上路由组件的router-link,然后通过index把需要显示的那个传过去即可。<el-col :span='18'><router-view :positionlist='positionlist[selectedindex]'></router-view></el-col><script>export default {data(){return{selectedindex:0,}}}</script>
子组件中
<div><div class="joinuscontent"><h6>{{positionlist.dutytitle}}</h6><p>{{positionlist.duty}}</p><h6>{{positionlist.treatitle}}</h6><p>{{positionlist.treatment}}</p></div><script>export default {props: {positionlist: {type: Object,required: true},},}</script>
this.$router.push()和路由跳转同时传递参数
| 原文链接 | https://blog.csdn.net/weixin_45781661/article/details/102736141 |
|---|---|
//传参的格式都是一样的{path: '/next',query: {title: this.tag,src: this.src}}//要跳转的下一个界面//用query传递参数,参数不会丢失,如果用params传参,参数会丢失//可以把对象写在data中,如何把名字绑定给路由即可//用this.$router.push()传参<script>go() {this.$router.push({path: '/next',//要跳转的下一个界面name: 'next',query: {//用query传递参数,参数不会丢失,如果用params传参,参数会丢失title: this.tag,src: this.src}})},</script>//用<router-link>传参<router-link :to="{path: '/next',query: {title: this.tag,src: this.src}}"></router-link>
动态路由
首先在router中的index.js中配置
{path:'/solution/:index',name:'solution',component: () => import(/* webpackChunkName: "about" */ '../views/solution.vue')},//:冒号代表动态路由
然后可以在你需要添加动态路由的地方进行配置
<div v-for='(item,index) in solutioncontent' :key='index' :id='item.id' class="nav-row"><img :src="item.iconPath" alt="" class="iconsize"><router-link :to="{path:'/solution/'+item.id,query:{slocont:solutioncontent[index]}}">{{item.title}}</router-link> //重要的是这一行</div>
获取路由的动态路径参数
this.$route.params.id //id换成动态路径的名称
如何使用less
安装less,安装后需要重启项目
//下载less和less-loader即可,lessloader版本过高可能报错//安装lessnpm i less --save-dev//安装less-loader 版本太高则可以指定版本npm install less-loader@4.1.0 --save
卸载less
npm uninstall lessnpm uninstall less-loader
使用bootstrap框架
引入一下他的样式
<!-- 最新版本的 Bootstrap 核心 CSS 文件 --><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"><!-- 可选的 Bootstrap 主题文件(一般不用引入) --><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap-theme.min.css" integrity="sha384-6pzBo3FDv/PJ8r2KRkGHifhEocL+1X2rVCTTkUfGk7/0pbek5mMa1upzvWbrUbOZ" crossorigin="anonymous"><!-- 最新的 Bootstrap 核心 JavaScript 文件 --><script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
项目文件夹中使用npm安装一下,就可以使用bootstrap的组件了。
npm install bootstrap@3
button的五种状态
a:link{color:#fff} //未访问时的状态(鼠标点击前显示的状态)
a:hover{color:#fff} //鼠标悬停时的状态
a:visited{color:#fff} //已访问过的状态(鼠标点击后的状态)
a:active{color:#fff} //鼠标点击时的状态
a:focus{color:#fff} //点击后鼠标移开保持鼠标点击时的状态[获得焦点](只有在<a href="#"></a>时标签中有效)
轮播图按照不同尺寸改变高度
| 教程原链接 | https://blog.csdn.net/qq_47452289/article/details/112461808 |
|---|---|
1.在data中定义一个值记录屏幕尺寸
data(){
return{
screenWidth: null, //屏幕尺寸
}
}
2.页面获取屏幕尺寸的值
mounted () {
this.screenWidth = document.body.clientWidth
window.onresize = () => { //屏幕尺寸变化就重新赋值
return (() => {
this.screenWidth = document.body.clientWidth
})()
}
}
3.如果要根据屏幕尺寸大小做操作的时候就用watch监听
watch: {
screenWidth: {
handler: function (val, oldVal) {
if (val < 1550) {
console.log('屏幕宽度小于1550px')
} else {
console.log('屏幕宽度大于1550px')
}
},
immediate: true
},
}
导航栏滚动到一定高度加上白色背景色
| 教程原链接 | https://blog.csdn.net/qq_41115965/article/details/80085942 |
|---|---|
$(function() {
$(".nav2").hide(); //首先隐藏变异的导航栏
$(window).scroll(function() {
if($(document).scrollTop() >= 200) {
$(".nav2").addClass("fixnav").slideDown();
//高度大于200 则添加样式, slideDown() 方法通过使用滑动效果,显示隐藏的被选元素。
} else {
$(".nav2").hide();
}
})
})
因为我的导航栏布局都一样,只是过一定高度需要加个白色背景色及阴影。稍微修改一下,通过添加和去除class来操控。
$(function() {
$(window).scroll(function() {
if($(document).scrollTop() >= 766) {
$(".nav").addClass("navafter");
}
else {
$(".nav").removeClass("navafter");
}
})
})
补充知识:如何获取当前高度
获取浏览器显示区域(可视区域)的高度 :
$(window).height();
获取浏览器显示区域(可视区域)的宽度 :
$(window).width();
获取页面的文档高度
$(document).height();
获取页面的文档宽度 :
$(document).width();
浏览器当前窗口文档body的高度:
$(document.body).height();
浏览器当前窗口文档body的宽度:
$(document.body).width();
获取滚动条到顶部的垂直高度 (即网页被卷上去的高度)
$(document).scrollTop();
获取滚动条到左边的垂直宽度 :
$(document).scrollLeft();
获取或设置元素的宽度:
$(obj).width();
获取或设置元素的高度:
$(obj).height();
某个元素的上边界到body最顶部的距离:obj.offset().top;(在元素的包含元素不含滚动条的情况下)
某个元素的左边界到body最左边的距离:obj.offset().left;(在元素的包含元素不含滚动条的情况下)
返回当前元素的上边界到它的包含元素的上边界的偏移量:obj.offset().top(在元素的包含元素含滚动条的情况下)
返回当前元素的左边界到它的包含元素的左边界的偏移量:obj.offset().left(在元素的包含元素含滚动条的情况下)
//滚动时触发函数
$(window).scroll(function () {})
vue $watch监听属性之 监听函数 handler() 以及 immediate:true立即执行
watch:{
// 轮播图高度的自适应
screenWidth: {
handler: function (val, oldVal) {
if (val < 769) {
this.bannerheight='315px'
} else if(val < 993){
this.bannerheight='419px'
} else if(val < 1201){
this.bannerheight= '542px'
}else if(val < 1441){
this.bannerheight= '766px'
}else{
this.bannerheight= '1020px'
}
// console.log(this.bannerheight);
},
immediate: true
},
// 滚动的时候,获取当前的高度
// 如果高度超过轮播图高度,则把样式切换
},
在接收到到数据中进行换行
| 原文链接 | https://www.cnblogs.com/leegent/p/9274424.html |
|---|---|
最后用的是css的方法,后台传过来的数据一般有默认的/n换行符,如果是从父组件传过来的,那么需要在每个换行的地方手动加上\n
<div class="joinuscontent">
<h6>{{positionlist.dutytitle}}</h6>
<p>{{positionlist.duty}}</p>
<h6>{{positionlist.treatitle}}</h6>
<p>{{positionlist.treatment}}</p>
</div>
<style>
.joinuscontent{
padding: 40px;
white-space: pre-wrap;
}
</style>
js的方法,但是没有成功
<script>
export default {
created(){
this.addbr()
},
methods:{
// 添加换行符,这里的意思把\n通过全局搜索(/g),全部转换为"<br/>"
addbr(){
this.positionlist.duty.replace(/\n/g, "<br/>")
}
}
}
</script>
如何修改element默认样式
方法一
//改不了只能在需要改样式的地方用!important覆盖掉
方法二
| 原文链接 | https://www.cnblogs.com/my466879168/p/12091439.html |
|---|---|
使用样式穿透,在控制台里面找到元素的默认样式,复制到代码中,在中间加上/deep/即可
<style scoped>
.my .el-input__inner{
border-radius: 30px;/* 这个不起作用 */
}
.my /deep/ .el-input__inner{
border-radius: 30px;/* 这个起作用 */
}
</style>
vue中使用本地json
| 原文链接 | https://blog.csdn.net/hdsHDS6/article/details/106336707 |
|---|---|
import导入即可
//示例
<script>
import jsondata from '../../public/data.json'
//注意如果json中使用静态资源,比如本地图片路径,如果vue-cli版本高于3.0,则需要把资源放到public文件夹中,如果低于3.0,则需要把资源放到static文件夹中。
data(){
return{
customers:[] //这个就可以用了
}
}
created(){
this.customers=jsondata.customers
console.log(this.customers);
},
</script>
