前端路线--Vue(day08)

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>

项目连接

大商创移动端的首页的头部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值