第九课时 通讯录列表-前端实现

本篇博客介绍如何组件化实现通讯录列表。主要包括Header、Search和List组件的创建。Header组件位于顶部,Search组件用于搜索,List组件则展示按字母排序的联系人,采用绝对布局。同时,对颜色样式进行了封装,并在PhoneBook中引入和配置这些组件。

概述

组件化界面,三个区域。
在这里插入图片描述
“通讯录” +符合 - src/pages/components/Header.vue,相对布局:

<template>
    <div class="header">
      通讯录
    </div>
</template>

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

<style lang="stylus" scoped>

  .header
    position: relative
    overflow: hidden
    height: 0.86rem
</style>

搜索 -src/pages/components/Search.vue

<template>
  <div class="search">
    <input type="text" placeholder="搜索"/>
  </div>
</template>

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

<style lang="stylus" scoped>

  .search
    height: 0.72rem
</style>

列表 -src/pages/components/List.vue:
每个字母为一个div,里面是字母和字母下的联系人,用了绝对布局

<template>
    <div class="list">
      <div class="phoneBook">
        <div class="title">A</div>
        <div class="item">
          <img src="http://www.open1111.com:80/image/default.jpg" >
          <div class="content border-bottom">阿里巴巴A</div>
        </div>
      </div>
      <div class="phoneBook">
        <div class="title">B</div>
        <div class="item">
          <img src="http://www.open1111.com:80/image/010.png" >
          <div class="content border-bottom">Bibi</div>
        </div>
        <div class="item">
          <img src="http://www.open1111.com:80/image/20190905093006.jpg">
          <div class="content border-bottom">B</div>
        </div>
      </div>
    </div>
</template>

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

<style lang="stylus" scoped>

  @import "~@/assets/styles/varibles.styl"

  .border-bottom
    &:before
      border-color: $borderColor

  .list
    overflow: hidden
    position: absolute
    top: 1.58rem
    left: 0
    right: 0
    bottom: 0
    .title
      line-height: .54rem
      background: $bgColor
      padding-left: .2rem
      color: #666
      font-size: .26rem
    .item
      line-height: .76rem
      margin: .2rem
      img
        float: left
        width: .8rem
        height: .8rem
        border-radius: .2rem
      .content
        padding-left: 1rem
        font-size: .4rem
        padding-bottom: .3rem

</style>

顶部和底部用相对布局,滚动的用绝对布局。

对颜色样式进行封装:
定义在这里插入图片描述
引入:
在这里插入图片描述

@import "~@/assets/styles/varibles.styl"

使用:
在这里插入图片描述
将它们引入PhoneBook:

<template>
  <div>
    <phone-book-header></phone-book-header>
    <phone-book-search></phone-book-search>
    <phone-book-list></phone-book-list>
  </div>
</template>

<script>
  import axios from 'axios'
  import {getServerUrl} from '@/config/sys.js'
  import PhoneBookHeader from './components/Header'
  import PhoneBookSearch from './components/Search'
  import PhoneBookList from './components/List'

  export default {
    name: "PhoneBook",
    components:{
      PhoneBookHeader,
      PhoneBookSearch,
      PhoneBookList
    },
    methods:{
      refreshToken(){
        let token=window.localStorage.getItem("token")
        axios.defaults.headers.common['token']=token
        let url=getServerUrl("refreshToken");
        axios.get(url)
          .then(response=>{
            console.log("token刷新:"+response.data.token)
            window.localStorage.setItem("token",response.data.token);
          }).catch(error=>{
          console.log(error)
        })
      },
      getPhoneBooks(){
        let token=window.localStorage.getItem("token")
        axios.defaults.headers.common['token']=token
        let url=getServerUrl("phoneBook/loadAll");
        /* axios.get(url)
           .then(response=>{
             console.log(response)
           }).catch(error=>{
           console.log(error)
         })*/
      }
    },
    mounted() {
      setInterval(this.refreshToken,1000*60*10); // 10分钟刷新一次token
      this.getPhoneBooks(); // 加载所有电话簿信息
    }
  }
</script>

<style scoped>

</style>

注意语法“”
配置component:名称一样,不用key value

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值