您的当前位置:首页正文

仿【得物】微信小程序实战全教程,2024年最新15个经典面试问题及答案精简版

2024-11-07 来源:个人技术集锦

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)

正文

云数据库


云数据库是一种NoSQL数据库。每一张表是一个集合。对于我的项目部分,我主要建立了一个商品集合。

dewu_goods 商品表 用于存储创商品的信息

- _id

- amway  是否为推荐

- brand  品牌

- buyer  已购买人数

- ctime  数据创建时间

- digest 详情介绍

- img    详情图

- pic    商品展示图

- kind   种类

- price  价格

- sex    适应人群

- title  简介

- type   首页索引

复制代码

可对在数据库中进行这些操作,注意导入数据格式需要是.csv.json文件,可先用excel表格建立数据集合如何转化成对应格式文件直接导入数据库。

0101.png

const db = wx.cloud.database() //云数据库

const dewuCollection = db.collection(‘dewu’) //在js文件中导入数据集合

复制代码

项目解构


以下是我主要实现的得物APP小程序界面

接下来对每个页面的细节进行解构。

购买首页


000.gif

购买首页样式

00.png

    

正品保障

{{}}

复制代码

商品项van-grid-item中采用绝对定位。tips中将direction属性设置为horizontal,可以让宫格的内容呈横向排列。搜索框设置disabled属性为禁用状态解决单击自动聚焦的问题。在使用van-grid布局时自定义每一项的属性需设置use-slot属性,否则不生效。

这个页面布局并不复杂,不过我在写这个布局时还是遇到了坑(感觉是自己跳进去的 我太???了)。在做dewu-hd吸顶时我是直接用van-sticky包起来实现,但是实际效果是tabs也需要固定在dewu-hd下面。这里不可以使用同上的方法,实际效果会使得整个van-tabs吸顶导致页面无法滑动。其实在这里只需要给van-tabs添加一个sticky属性并且设置offset-top,注意这两个属性需一起使用才能生效。

获取商品项

async onLoad() {

this.proData()   //获取推荐数据项

this.shoeData()  //获取鞋类数据项

},

proData() {

const {data} = await dewuCollection

.where({

amway: db.command.eq(‘TRUE’)

})

.field({          //获取指定数据项,提升性能

_id:true,

pic:true,

title:true,

buyer:true,

price:true

})

.get()

// console.log(data);

this.setData({

produces: data,

})

}

shoeData() {

let data1 = await dewuCollection

.where({

type: 1

})

.get()

// console.log(data1.data);

this.setData({

shoes: data1.data

})

}

复制代码

绑定详情页

gotoDetail(e) {

// console.log(e);

wx.navigateTo({

url: ‘/pages/buy_page/page/detail/detail?id=’+e.currentTarget.dataset.id,

})

},

复制代码

利用商品_id属性唯一,当设定数据项id等于_id时跳转到详情页且展示对应数据。

商品详情页


001.gif

商品详情页样式

03.png

{{img.digest}}

¥{{img.price}}

选择尺码

请选择尺码

立即购买

复制代码

整体分为detail_hddetail_bd两部分。自定义swiper需设置dot对应展示图片并更改样式,circular属性设置是否启用滑块切换动画,这里使用三目运算符判断是否添加新的样式类名。在定义商品价格的样式的时候可以通过first-letter伪元素来定义¥符号样式。引用组件van-goods-action使得购买按钮吸底。

05.png

{{item.price}}

请选择商品

已选 {{item.size}}

{{item.size}}

¥{{item.price}}

{{}}

复制代码

使用van-popup组件,给对应标签设置事件即可绑定弹出。例:<van-cell bind:click="showPopup"></van-cell>。三目运算符设置默认样式并且控制选中边框样式,设置closeable属性启用关闭按钮。square设置van-grid-item为方形,gutter设置格子间距。

06.png

相关推荐

复制代码

设置detail_produce-hd吸顶,给右侧关闭icon绑定bind:close="onClose"事件。

获取商品详情

async onLoad(options) {  //获取对应_id的商品数据

console.log(options);

let id = options.id

console.log(id);

wx.cloud.database().collection(‘dewu’)

.doc(id)

.get()

.then(res => {

console.log(res);

this.setData({

img :res.data

})

})

},

复制代码

弹出层

showPopup() {   //显示弹出层

this.setData({

show: true,

});

},

onClose() {     //关闭弹出层

this.setData({

show: false,

});

},

复制代码

选择尺码

pickSize(e) {

let flag = e.currentTarget.dataset.flag

let index = e.currentTarget.dataset.index

if(flag==index) {

this.setData({

activeSizeIndex: -1,

flag: -1

})

}

else {

this.setData({

activeSizeIndex: index,

flag: index

})

}

},

复制代码

点击尺码,flag==index即为选中状态,再次点击时或者点击其他尺码时设置为非选中状态,否则使flag等于index,使其变成选中状态。

搜索页


002.gif

搜索页样式

01.png

历史搜索

{{}}

复制代码

搜索页面主要分为头部搜索框和内容(搜索推荐,历史记录和搜索到的商品列表)两部分。这里用van-sticky包装搜索框使吸顶,内容部分则用block标签包装,利用wx:if这个控制属性来判断是否显示。

搜索记录

async onSearch(e) {

// console.log(e);

if (!e.detail.trim()) {

wx.showToast({

title: ‘请输入商品名’,

})

return

}

let {value, historyList} = this.data

if(historyList.indexOf(value) !== -1) {

historyList.splice(historyList.indexOf(value), 1)

}

historyList.unshift(value)

this.setData({

historyList

})

wx.setStorageSync(‘value’, historyList)

let keyword = e.detail.trim()

let results = await dewuCollection

.where({

title: db.RegExp({

regexp: keyword,

options: ‘i’

})

})

.get()

if (results.data.length == 0 || keyword == ‘’) {

wx.showToast({

title: ‘不存在’+keyword,

})

}

else {

await dewuCollection

.where({

title: db.RegExp({

regexp: keyword,

options: ‘i’

})

})

.orderBy(‘hot’, ‘desc’)

.get()

.then(res => {

console.log(res);

this.setData({

results: res.data

})

})

}

},

onLoad() {

this.getSearchHistory()  //获取历史搜索

},

getSearchHistory() {

let historyList = wx.getStorageSync(‘value’)

if(historyList) {

this.setData({

historyList

})

}

},

复制代码

页面加载时从本地storage中获取历史搜索记录,在确定搜索onSearch时判断value是否为空,将合法value插入historyList中,这里使用的时unshift方法,这样可以保证最近的搜索记录展示在前面,利用正则表达式模糊查询数据库中符合的项存入数组results中,当results.length > 0时显示商品列表。利用wx.setStorageSyncvalue存入缓存,wx.getStorageSync获取打印出来。通过indexOf方法判断value是否已经存在,是则删除historyList中的该项。

历史搜索

async historySearch(e) {

// console.log(e);

let historyList = this.data.historyList

let value = historyList[e.currentTarget.dataset.index]

this.setData({

value,               //修改value

showHotList: false,  //隐藏热门搜索

showHistory: false,  //隐藏历史搜索

results: []          //清空商品列表

})

},

复制代码

点击历史搜索项时setData使对应值改变,再调用onSearch方法。

清空控件

onClear() {

this.setData({

results: [],

value: ‘’,

showHotList: true,

showHistory: true

});

},

onChange(e) {  //search框输入改变时实时修改数据

// console.log(e.detail);

this.setData({

value: e.detail,

showHotList: false,

showHistory: false,

results: []

})

// console.log(this.data.showHotList);

if (this.data.value==‘’) {

this.setData({

showHotList: true,

showHistory: true

})

}

},

复制代码

清空搜索历史

deleteSearchHistory() {

wx.showModal({

content: ‘确认清空历史记录’,

success: (res) => {

if(res.confirm) {

this.setData({

historyList: []

})

}

}

})

wx.removeStorageSync(‘value’)

},

复制代码

点击删除icon弹出对话框wx.showModal实现交互,用户点击确定则清空historyList并利用wx.removeStorageSync将本地存储的历史记录删除。

品牌分类页


003.gif

分类页样式

07.png

{{}}

{{}}

{{}}

复制代码

分类页面主要是使用了scroll-view设置竖向滚动,点击左侧scroll-view-left-item时该项变为得物色(#00cbcc)并显示对应的品牌种类项kindsItem。整体采用flex布局,这里的坑是scroll-view-left应该把font-size设为0,在子元素scroll-view-left-item中设置font,避免块元素边距影响布局。

初始化品类

onLoad: function (options) {

this.setData({

kindNav: kindNav,

kindall: kindItem,

// console.log(this.data.kindall);

let kinds=[];

// console.log(this.data.kindall)

this.data.kindall.forEach(kind => { //循环从所有品类中获取对应kindNav的并存入数组中

if(kind.camptype == 0) {

kinds.push(kind)

}

})

this.setData({

kindItem: kinds,

})

}, )

},

复制代码

选择分类

changeKinds(e) {

console.log(e);

let {index, type} = e.currentTarget.dataset;

console.log(index, type);//index与推荐品牌的索引有关。type与kind.js的camptype有关

this.setData({

activeNavIndex: index,

})

let title=[]

this.data.kindTitles.forEach(kindTitle => {

if(index == kindTitle.titletype) {

title.push(kindTitle)

}

})

this.setData({

kindItem: kinds,

})

},

复制代码

绑定筛选页

gotoAssem(e) {

// console.log(e);  利用kind属性值唯一(buy页面tabs的title)

wx.navigateTo({

url: ‘/pages/buy_page/page/assem/assem?title=’+e.currentTarget.dataset.title,

})

},

复制代码

筛选排序页


004.gif

排序页样式

08.png

<view wx:for=“{{tabs}}” wx:key=“index” data-index=“{{index}}”

class=“tab-item {{activeTabIndex == index?‘active’: ‘’}}” bindtap=“changeItem”>

{{item.title}}

复制代码

tab使用flex布局。goods部分布局参照buy页面的商品布局。

011.png

结尾

学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
f261.gif)

004.gif

排序页样式

08.png

<view wx:for=“{{tabs}}” wx:key=“index” data-index=“{{index}}”

class=“tab-item {{activeTabIndex == index?‘active’: ‘’}}” bindtap=“changeItem”>

{{item.title}}

复制代码

tab使用flex布局。goods部分布局参照buy页面的商品布局。

011.png

结尾

学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-06WMQnIQ-1713453933402)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Top