折腾:
【记录】小程序优化绘本查询细节的功能和逻辑
期间,需要去实现:
多个页面都有tags的显示:
首页的tag

详情页的tag
推荐列表中的tag

所以打算把
用自己自定义的book-list去调用自定义的tags标签组
【总结】
最后用代码:
book-list:
components/book_list/book_list.json
"component": true,
"usingComponents": {
"tags": "/components/tags/tags"
}
}components/book_list/book_list.wxml
<tags
input-tag-list="{{curBookItem.tags}}"
book-difficulty="{{curBookItem.grading.difficulty}}"
highlight-tag="{{highlightTag}}"
/>tags:
components/tags/tags.json
{
"component": true,
"usingComponents": {}
}components/tags/tags.js
// components/tags/tags.js
const app = getApp() //获取应用实例
const util = require('../../utils/util.js')
const book_common = require('../../utils/book_common.js')
Component({
// lifetimes: {
// created: function () {
// // 在组件实例进入页面节点树时执行
// console.log("component tags created")
// },
// attached: function () {
// // 在组件实例进入页面节点树时执行
// console.log("component tags attached")
// },
// ready: function () {
// // 在组件实例进入页面节点树时执行
// console.log("component tags ready")
// },
// moved: function () {
// // 在组件实例进入页面节点树时执行
// console.log("component tags moved")
// },
// detached: function () {
// // 在组件实例被从页面节点树移除时执行
// console.log("component tags detached")
// },
// },
// pageLifetimes: {
// show: function () {
// // 在组件实例进入页面节点树时执行
// console.log("component tags show")
// },
// },
/**
* 组件的属性列表
*/
properties: {
bookDifficulty:{
// type: Number,
// value: 0,
type: String,
value: "",
},
inputTagList: {
type: Array,
value: [],
observer: function (newTagList, oldTagList, changedPath) {
console.log("inputTagList observer: newTagList=%o, oldTagList=%o, changedPath=%o",
newTagList, oldTagList, changedPath)
console.log("this.properties.highlightTag=%s", this.properties.highlightTag)
if(newTagList){
var normalTagList = newTagList
var highlightTagList = []
if (this.properties.highlightTag) {
normalTagList = util.removeListItem(newTagList, this.properties.highlightTag)
highlightTagList = [this.properties.highlightTag]
}
console.log("normalTagList=%o, highlightTagList=%o", normalTagList, highlightTagList)
this.setData({
normalTagList: normalTagList,
highlightTagList: highlightTagList,
})
}
}
},
highlightTag: {
type: String,
value: "",
// observer: function (newHighlightTag, oldHighlightTag, changedPath) {
// console.log("highlightTag observer: newHighlightTag=%s, oldHighlightTag=%s, changedPath=%o",
// newHighlightTag, oldHighlightTag, changedPath)
// },
}
},
/**
* 组件的初始数据
*/
data: {
highlightTagList: [],
normalTagList: [],
},
/**
* 组件的方法列表
*/
methods: {
tagClickCallback: function (e) {
console.log("tagClickCallback: e=%o", e)
var tag = e.currentTarget.dataset.tag
console.log("tag=%s", tag)
var difficulty = e.currentTarget.dataset.difficulty
console.log("difficulty=%s", difficulty)
var queryParaDict = {
"tag": tag,
"difficulty": difficulty,
}
var encodedQueryStr = util.encodeQueryDict(queryParaDict)
console.log("queryParaDict=%o -> encodedQueryStr=%s", encodedQueryStr)
var indexUrl = '../index/index'
indexUrl += "?" + encodedQueryStr
console.log("indexUrl=%s", indexUrl)
//redirect to index page
wx.navigateTo({
url: indexUrl,
})
},
},
})
components/tags/tags.wxml
<!--components/book_list/book_list.wxml-->
<view class='tag_list'>
<view
wx:for="{{highlightTagList}}"
wx:for-index="highlightTagIdx"
wx:for-item="eachHighlightTag"
wx:key="*this"
class='single_tag_normal highlight_tag'
bindtap='tagClickCallback'
data-tag="{{eachHighlightTag}}"
data-difficulty="{{bookDifficulty}}"
>
{{eachHighlightTag}}
</view>
<view
wx:for="{{normalTagList}}"
wx:for-index="normalTagIdx"
wx:for-item="eachNormalTag"
wx:key="*this"
class='single_tag_normal'
bindtap='tagClickCallback'
data-tag="{{eachNormalTag}}"
data-difficulty="{{bookDifficulty}}"
>
{{eachNormalTag}}
</view>
</view>components/tags/tags.wxss
/* components/tags/tags.wxss */
.tag_list{
}
.single_tag_normal{
font-size: 12px;
font-weight: 400;
margin-right: 4px;
padding-top: 1px;
padding-bottom: 0;
background-color: rgba(97, 210, 179, 0.8);
color: rgba(255, 255, 255, 0.9);
height: 15px;
line-height: 14px;
display: inline-block;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
padding-right: 0.6em;
padding-left: 0.6em;
border-radius: 10rem;
}
.highlight_tag{
background-color: rgb(19, 183, 149);
}实现了 自定义组件book-list,调用自定义组件tags:


转载请注明:在路上 » 【已解决】小程序中实现自定义组件调用自定义组件