note笔记
/*
修改启动项目的指令:
原:cnpm run serve
在package.json中:
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
serve改成dev
新:cnpm run dev
*/
/*
单页面应用:只有一个页面,只是通过路由来切换资源
*/
/*
路由重定向:
在router下-->index.js
//让路由为/时,默认跳转到首页
let routes = [
{ path: "/", component: HomePage, redirect: "/home" }
]
*/
/*
引入css的方法:
1.App.vue中:(所有的页面都有用)
@import url("./styles/base.css");
@import url("./fonts/iconfont.css");
2.在main.js中:将css作为模块引入
// 将css作为模板引入
import "./fonts/iconfont.css"
3.在public下index.html加<link> 方法太low
*/
/*
项目说明:
1.配置路由
下载模块 引入 使用
准备路由(引入页面)
配置路由
引入路由 挂载(main.js)
2.使用less
下载less(注意版本)
使用less lang="less"
less中&表示上级
3.使用字体图标
下载字体图标
引入和使用
*/
/*
登录页面和注册页面
1.views--LoginPage--LoginPage.vue
--RegisterPage--RegisterPage.vue
这两个页面无TabBar组件
2.index.js中配置路由(路由懒加载)
let routes = [
// 路由的懒加载:并不是一打开项目就加在所有的路由
//所以只要用户点击跳转到登录页面再将页面引入
{ path: "/login", component: () => import("@/views/LoginPage/LoginPage.vue") },
{ path: "/register", component: () => import("@/views/RegisterPage/RegisterPage.vue") },
{ path: "/search", component: () => import("@/views/SearchPage/SearchPage.vue") }
]
3.这两个页面不显示TabBar组件
路由元信息:
在index.js下,配置路由中加meta:{},让哪个页面有TabBar就加给谁
let routes = [
// 配置路由元信息:让login和register这两个页面不显示TabBar
{ path: "/home", component: HomePage, meta: { showTabBar: true } },
{ path: "/find", component: FindPage, meta: { showTabBar: true } },
{ path: "/category", component: CategoryPage, meta: { showTabBar: true } },
{ path: "/cart", component: CartPage, meta: { showTabBar: true } },
{ path: "/mine", component: MinePage, meta: { showTabBar: true } },
// 路由的懒加载:并不是一打开项目就加在所有的路由
//所以只要用户点击跳转到登录页面再将页面引入
{ path: "/login", component: () => import("@/views/LoginPage/LoginPage.vue") },
{ path: "/register", component: () => import("@/views/RegisterPage/RegisterPage.vue") },
{ path: "/search", component: () => import("@/views/SearchPage/SearchPage.vue") }
]
4.在App.vue中,在视图组件中使用
<!-- 利用路由元信息,让配置showTabBar原信息的路由显示TabBar这个组件 -->
<TabBar v-if="$route.meta.showTabBar"></TabBar>
*/
/*
首页的开发:
1.HomePage--components--HomeHeader.vue(首页公共头部)
--children--HomeIndex.vue(首页的首页)
--HomeCate.vue(首页的分类)
将以上子页面引入到HomePage页面,注册,使用。
2.HomeHeader.vue的开发
样式见代码:(HomeHeader.vue)
Tab栏切换插件:
npmjs.com 有个ly-tab的插件
2.1下载模块
cnpm install ly-tab --save
2.2引入main.js中
// 引入Tab切换页组件(全局引入)
import LyTab from 'ly-tab';
2.3使用LyTab
Vue.use(LyTab);
2.4在HomeHeader.vue中局部引入(不和全局引入冲突)
//引入Tab切换页组件(局部引入)
import { LyTabs, LyTabItem } from "ly-tab";
2.5将注册成组件
components: {
LyTabs,
LyTabItem,
}
2.6 使用可以看到官网的示例,修改默认样式达到我们的要求
<div class="tabs">
<ly-tabs v-model="value" activeColor="#ffffff" @change="changeTabs">
// value:定义在下方data 默认让哪一个选中
//activeColor:选中的样式
//change:自带一个事件,事件默认有一个参数指向下面的name
<ly-tab-item name="1" title="首页" />
<ly-tab-item name="2" title="家用电器" />
<ly-tab-item name="3" title="男装女装" />
<ly-tab-item name="4" title="鞋靴箱包" />
<ly-tab-item name="5" title="手机数码" />
<ly-tab-item name="6" title="电脑办公" />
<ly-tab-item name="7" title="家具家纺" />
<ly-tab-item name="8" title="个人化妆" />
<ly-tab-item name="9" title="休闲运动" />
</ly-tabs>
<div class="cate">
<i class="iconfont icon-fenlei2"></i>
<span>分类</span>
</div>
</div>
3.Tab栏点击切换对应的页面
3.1子传父(HomeHeader--HomePage)
在HomeHeader的methods中:
methods: {
changeTabs(name) {
console.log(name);//上面传过来的标签的name:1,2,3...
this.$emit("toparent", name);
}
3.2HomePage(父)接收传来的数据
<template>
<div class="home_page">
<HomeHeader @toparent="getName"></HomeHeader>
<div style="height: 8.8rem"></div>
<HomeIndex v-if="activeTab"></HomeIndex>
<HomeCate v-else></HomeCate>
</div>
</template>
activeTab:定义在data中 activeTab:true
3.3让首页--组件/首页--分类显示
HomePage的methods中:
methods: {
getName(data) {
// 判断data==1时代表点击的是tab切换页的首页
if (data == 1) {
this.activeTab = true;
} else {
this.activeTab = false;
}
},
}
*/
/*
点击搜索框跳转:编程式导航--通过事件跳转
1.给搜索框加:@click="toSearchPage"
2.methods中:
// 跳转页面事件
toSearchPage() {
console.log(this.$route); //单个路由信息
console.log(this.$router); //整个路由实例
this.$router.push("/search"); //编程式导航--通过事件来跳转页面
}
*/
HomeHeader.vue
<!-- 首页的头部公共组件 -->
<template>
<div class="home_header">
<div class="header_search">
<div class="search" @click="toSearchPage">
<i class="iconfont icon-sousuo"></i>
</div>
<div class="msg">
<i class="iconfont icon-liaotian"></i>
</div>
</div>
<div class="tabs">
<ly-tabs v-model="value" activeColor="#ffffff" @change="changeTabs">
<ly-tab-item name="1" title="首页" />
<ly-tab-item name="2" title="家用电器" />
<ly-tab-item name="3" title="男装女装" />
<ly-tab-item name="4" title="鞋靴箱包" />
<ly-tab-item name="5" title="手机数码" />
<ly-tab-item name="6" title="电脑办公" />
<ly-tab-item name="7" title="家具家纺" />
<ly-tab-item name="8" title="个人化妆" />
<ly-tab-item name="9" title="休闲运动" />
</ly-tabs>
<div class="cate">
<i class="iconfont icon-fenlei2"></i>
<span>分类</span>
</div>
</div>
</div>
</template>
<script>
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
//引入Tab切换页组件(局部引入)
import { LyTabs, LyTabItem } from "ly-tab";
export default {
//import引入的组件需要注入到对象中才能使用
components: {
LyTabs,
LyTabItem,
},
data() {
//这里存放数据
return {
value: "1",
};
},
//计算属性 类似于data概念
computed: {},
//监控data中的数据变化
watch: {},
//方法集合
methods: {
//changeTabs会有一个data数据,就是上面tab分页的name(1,2,3...)
changeTabs(data) {
// 向父亲传值
this.$emit("toparent", data);
},
//通过事件跳转--编程式导航
// 点击搜索框跳转到搜索页面
toSearchPage() {
// $route:单个路由信息
//$router:整个路由实例
//$router里有个push("跳转的路由")方法,可以跳转到相应的页面
this.$router.push("/search");
},
},
beforeCreate() {}, //生命周期 - 创建之前
//生命周期 - 创建完成(可以访问当前this实例)
created() {},
beforeMount() {}, //生命周期 - 挂载之前
//生命周期 - 挂载完成(可以访问DOM元素)
mounted() {},
beforeUpdate() {}, //生命周期 - 更新之前
updated() {}, //生命周期 - 更新之后
beforeDestroy() {}, //生命周期 - 销毁之前
destroyed() {}, //生命周期 - 销毁完成
activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
};
</script>
<style lang="less">
.home_header {
width: 100%;
height: 8.8rem;
background-color: #f55;
position: fixed;
left: 0;
top: 0;
.header_search {
width: 100%;
height: 4.4rem;
display: flex;
align-items: center;
.search {
width: calc(85% - 1rem);
height: 3rem;
margin-left: 1rem;
background-color: #fff;
border-radius: 1.5rem;
position: relative;
i {
font-size: 2.2rem;
position: absolute;
right: 0.5rem;
top: 50%;
transform: translateY(-50%);
color: #999;
}
}
.msg {
width: 15%;
line-height: 4.4rem;
text-align: center;
margin-top: 0.4rem;
i {
font-size: 2.2rem;
color: #fff;
}
}
}
.tabs {
display: flex;
align-items: center;
.ly-tabs {
width: 80%;
height: 4.4rem;
background: transparent;
border: 0;
color: #fff;
.ly-tab-item {
color: #ffff !important;
}
}
.cate {
text-align: center;
color: #fff;
i {
font-size: 2.2rem;
}
span {
margin-left: 0.5rem;
font-size: 1.4rem;
vertical-align: top;
}
}
}
}
</style>
大商创移动端的首页的头部
<!-- 首页的头部公共组件 -->
<template>
<div class="home_header">
<div class="header_search">
<div class="search" @click="toSearchPage">
<i class="iconfont icon-sousuo"></i>
</div>
<div class="msg">
<i class="iconfont icon-liaotian"></i>
</div>
</div>
<div class="tabs">
<ly-tabs v-model="value" activeColor="#ffffff" @change="changeTabs">
<ly-tab-item name="1" title="首页" />
<ly-tab-item name="2" title="家用电器" />
<ly-tab-item name="3" title="男装女装" />
<ly-tab-item name="4" title="鞋靴箱包" />
<ly-tab-item name="5" title="手机数码" />
<ly-tab-item name="6" title="电脑办公" />
<ly-tab-item name="7" title="家具家纺" />
<ly-tab-item name="8" title="个人化妆" />
<ly-tab-item name="9" title="休闲运动" />
</ly-tabs>
<div class="cate">
<i class="iconfont icon-fenlei2"></i>
<span>分类</span>
</div>
</div>
</div>
</template>
<script>
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
//引入Tab切换页组件(局部引入)
import { LyTabs, LyTabItem } from "ly-tab";
export default {
//import引入的组件需要注入到对象中才能使用
components: {
LyTabs,
LyTabItem,
},
data() {
//这里存放数据
return {
value: "1",
};
},
//计算属性 类似于data概念
computed: {},
//监控data中的数据变化
watch: {},
//方法集合
methods: {
//changeTabs会有一个data数据,就是上面tab分页的name(1,2,3...)
changeTabs(data) {
// 向父亲传值
this.$emit("toparent", data);
},
//通过事件跳转--编程式导航
// 点击搜索框跳转到搜索页面
toSearchPage() {
// $route:单个路由信息
//$router:整个路由实例
//$router里有个push("跳转的路由")方法,可以跳转到相应的页面
this.$router.push("/search");
},
},
beforeCreate() {}, //生命周期 - 创建之前
//生命周期 - 创建完成(可以访问当前this实例)
created() {},
beforeMount() {}, //生命周期 - 挂载之前
//生命周期 - 挂载完成(可以访问DOM元素)
mounted() {},
beforeUpdate() {}, //生命周期 - 更新之前
updated() {}, //生命周期 - 更新之后
beforeDestroy() {}, //生命周期 - 销毁之前
destroyed() {}, //生命周期 - 销毁完成
activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
};
</script>
<style lang="less">
.home_header {
width: 100%;
height: 8.8rem;
background-color: #f55;
position: fixed;
left: 0;
top: 0;
.header_search {
width: 100%;
height: 4.4rem;
display: flex;
align-items: center;
.search {
width: calc(85% - 1rem);
height: 3rem;
margin-left: 1rem;
background-color: #fff;
border-radius: 1.5rem;
position: relative;
i {
font-size: 2.2rem;
position: absolute;
right: 0.5rem;
top: 50%;
transform: translateY(-50%);
color: #999;
}
}
.msg {
width: 15%;
line-height: 4.4rem;
text-align: center;
margin-top: 0.4rem;
i {
font-size: 2.2rem;
color: #fff;
}
}
}
.tabs {
display: flex;
align-items: center;
.ly-tabs {
width: 80%;
height: 4.4rem;
background: transparent;
border: 0;
color: #fff;
.ly-tab-item {
color: #ffff !important;
}
}
.cate {
text-align: center;
color: #fff;
i {
font-size: 2.2rem;
}
span {
margin-left: 0.5rem;
font-size: 1.4rem;
vertical-align: top;
}
}
}
}
</style>