vue慕课网音乐项目手记:43-搜索页面的数据获取以及使用

第一步:search组件里面监听search-box的query的变化:

<search-box ref="searchBox" @query="changeQuery"></search-box>

data里面定义一个query

query: ''

然后,如果query发生改变,就赋值给query

changeQuery (query) {
      this.query = query
    }

这时候把query的值传给suggest组件。
然后定义去数据的接口,这里面有三个值是变化的,所以要传入三个变量:

export function search (query, page, zhida) {
  const url = 'https://c.y.qq.com/soso/fcgi-bin/search_for_qq_cp'

  const data = Object.assign({}, commonParams, {
    w: query,
    p: page,
    catZhida: zhida ? 1 : 0,
    uin: 0,
    platform: 'h5',
    needNewCode: 1,
    zhidaqu: 1,
    t: 0,
    flag: 1,
    ie: 'utf-8',
    sem: 1,
    aggr: 0,
    perpage: 20,
    n: 20,
    remoteplace: 'txt.mqq.all',
    _: +new Date()
  })

  return jsonp(url, data, options)
}

然后在组件里面使用:

_search () {
      search(this.query, this.page, this.showSinger).then((res) => {
        if (res.code === ERR_OK) {
          console.log(res)
          this.result = this._geyResult(res.data)
          console.log(this.result)
        }
      })
    },

这时候拿到的数据格式不是理想的:
获取到的数据
处理函数:

_geyResult (data) {
      let ret = []
      if (data.zhida && data.zhida.singerid) {
        ret.push({...data.zhida, ...{type: TYPE_SINGER}})
      }
      if (data.song) {
        ret = ret.concat(data.song,list)
      }
      return ret
    }

番外篇:es6 …需要学习。

处理后

数据的使用:

<li class="suggest-item" v-for="item in result" :key="item.index">
        <div class="icon">
          <i :class="getIconCls(item)"></i>
        </div>
        <div class="name">
          <p class="text" v-html="getDisplayName(item)"></p>
        </div>
      </li>
getIconCls (item) {
      if (item.type === TYPE_SINGER) {
        return 'icon-mine'
      } else {
        return 'icon-music'
      }
    },
    getDisplayName (item) {
      if (item.type === TYPE_SINGER) {
        return item.singername
      } else {
        return `${item.songname}-${item.singer[0].name}`
      }
    },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值