接续昨天未完成的部分...
下一步就是要来处理药局资料,在asideMenu.vue的computed取state(记得加入import {mapState} from "vuex"
)
computed: {
currCity: {...},
currDistrict: {...},
...mapState(["stores"]),
...mapGetters(["cityList", "districtList"]),
},
用v-for改写模板中的药局列表区
<ul class="store-lists">
<li class="store-info wraps" v-for="s in stores" :key="s.id">
<h1>{{ s.name }}</h1>
<div class="mask-info">
<i class="fas fa-head-side-mask"></i>
<span>大人口罩: {{ s.mask_adult }} 个</span>
</div>
<div class="mask-info">
<i class="fas fa-baby"></i>
<span>儿童口罩: {{ s.mask_child }} 个</span>
</div>
<div class="mask-info">最後更新时间:{{ s.updated }}</div>
<button class="btn-store-detail">
<i class="fas fa-info-circle"></i>
看详细资讯
</button>
</li>
</ul>
到此步骤大致有了个模样,但药局的部分并没有被过滤而是一次列出所有的资料,所以要回到store/index.js增加一个getters处理资料
filteredStores(state) {
//依县市和行政区分组
const { stores } = state
return stores.filter((d) => d.county === state.currCity && d.town === state.currDistrict)
}
回到asideMenu.vue修改computed和模板
computed: {
currCity: {...},
currDistrict: {...},
//删除...mapState(["stores"]),
//新增filteredStores
...mapGetters(["cityList", "districtList","filteredStores"]),
},
<ul class="store-lists">
<li class="store-info wraps" v-for="s in filteredStores" :key="s.id">
</li>
</ul>
这样药局就会跟着所选的区域更动了!!
左侧选单就剩下最後一块关键字搜寻,
首先,在store/index.js中的state加上一个新的属性
state: {
currCity: '台北市',
currDistrict: '北投区',
location: [],
stores: [],
keywords:''
},
以及对应的mutations
setKeywords(state, payload) {
state.keywords = payload
}
在asideMenu.vue新增对应的computed属性
keywords: {
get() {
return this.$store.state.keywords;
},
set(value) {
this.$store.commit("setKeywords", value);
},
},
到getters改写filteredStores,有关键字的情况下无视县市区的分组条件
filteredStores(state) {
//依县市和行政区分组
const { stores } = state
//加入关键字判断
return state.keywords
? stores.filter((d) => d.name.includes(state.keywords))
: stores.filter((d) => d.county === state.currCity && d.town === state.currDistrict)
}
最後,让关键字有hightlight的效果以增加使用者的体验
在asideMenu.vue新增methods属性
methods: {
keywordsHighlight(val) {
return val.replace(
new RegExp(this.keywords, "g"),
`<span class="highlight">${this.keywords}</span>`
);
},
},
并将模板中的h1做改写
<h1 v-html="keywordsHighlight(s.name)"></h1>
加上颜色的style
.highlight {
color: #f09d49;
}
侧选单的部分就完成拉!!!
<<: Day_30:让 Vite 来开启你的Vue之 内牛满面 的 完赛感言
>>: 初学者跪着学JavaScript Day27 : 渣男给不完的promise
当你设置完关键字等广告,接着可以使用品质分数这个工具去观察,好让你可以适度做些调整,透过这些品质分数...
MVVM由三项组成。 分别为(Model、View、ViewModel) 先来上MVVM架构图,方便...
其实原本最初规画想要做Index方式的纪录,然後多增加一些没写到的面向 不过,总是计画赶不上变化 ...
哈罗大家好~~ 昨天的 Microsoft 365介绍方案告一段落,不知道大家对於Microsoft...
今日早上助教讲了一篇论文,主要是应用Yolo做图片辨识,下午则是各组别报告与该组专题相关的论文,及目...