Page({
data: {
products: [
{ id: 1, name: '产品A', price: 100 },
{ id: 2, name: '产品B', price: 200 }
]
},
handleCategoryTap: function() {
console.log('商品分类被点击');
},
handleProductTap: function(e) {
console.log('产品' + e.currentTarget.dataset.name + '被点击');
}
});
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
2.catchtap
- 场景描述:在一个表单页面中,有一个提交按钮。当用户点击提交按钮时,只会触发按钮自身的提交事件,不会触发其他无关的事件(如页面上的其他按钮的点击事件或链接的跳转事件)。
<view>
<button>提交订单</button>
<a href="/pages/other/other">另一个页面a>
</view>
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
Page({
handleSubmitTap: function() {
console.log('提交订单按钮被点击');
}
});
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
11. 微信小程序与H5的区别?
答案:运行环境不同(小程序在微信运行,H5在浏览器运行);开发成本不同(H5需要兼容不同的浏览器);获取系统权限不同(系统级权限可以和小程序无缝衔接);应用在生产环境的运行流畅度不同(H5需不断对项目优化来提高用户体验)。
12. 微信小程序原理是什么?
答案:微信小程序采用JavaScript、WXML、WXSS三种技术进行开发。从技术上讲和现有的前端开发差不多,但深入挖掘又有所不同。JavaScript的代码是运行在微信App中的,并非运行在浏览器中,因此一些H5技术的应用需要微信App提供对应的API支持。WXML是微信自己基于XML语法开发的,只能使用微信提供的现有标签。WXSS具有CSS的大部分特性,但并不是所有的都支持。微信的架构是数据驱动的架构模式,UI和数据是分离的,所有的页面更新都需要通过对数据的更改来实现。小程序分为webview和appService两部分,其中webview主要用来展现UI,appService有来处理业务逻辑、数据及接口调用,它们在两个进程中运行,通过系统层JSBridge实现通信,完成UI的渲染、事件的处理。
13. 分析微信小程序的优劣势?
答案:优势包括无需下载、打开速度快、开发成本低、为用户提供良好的安全保障、服务请求快等。劣势包括依托微信不能开发后台管理功能、大小限制不能超过2M、不能打开超过5个层级的页面、样式单一等。
14. 如何解决微信小程序的异步请求问题?
答案:在回调函数中调用下一个组件的函数。
1.使用回调函数
wx.request({
url: 'https://example.com/api',
success: function(res) {
console.log('请求成功,返回数据:', res.data);
},
fail: function(error) {
console.error('请求失败,错误信息:', error);
}
});
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
2.使用Promise对象
可以使用Promise封装wx.request(),利用Promise的链式调用特性,简化异步处理过程
function request(url) {
return new Promise((resolve, reject) => {
wx.request({
url: url,
success: function(res) {
resolve(res.data);
},
fail: function(res) {
reject(res);
}
});
});
}
request('https://example.com/api')
.then(function(data) {
console.log('请求成功,返回数据:', data);
})
.catch(function(err) {
console.error('请求失败,错误信息:', err);
});
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
class="hide-preCode-box">
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
3.使用async/await
通过async和await关键字,可以以同步的方式编写异步代码
async function fetchData() {
try {
const res = await new Promise((resolve, reject) => {
wx.request({
url: 'https://example.com/api',
success: resolve,
fail: reject
});
});
console.log('请求成功,返回数据:', res.data);
} catch (error) {
console.error('请求失败,错误信息:', error);
}
}
fetchData();
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
class="hide-preCode-box">
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
15. 小程序有哪些文件类型?
答案:WXML(模板文件)、WXSS(样式文件)、JS(脚本逻辑文件)、JSON(配置文件)。
16. 简述微信小程序页面的生命周期函数?
答案:onLoad:页面加载时触发;onReady:页面初次渲染完成时触发;onShow:页面显示时触发;onHide:页面隐藏时触发;onUnload:页面卸载时触发。
17. 小程序如何更新页面中的值?
答案:通过调用this.setData()方法来更新页面中的值。
18. 如何实现登录数据的持久化?
答案:可以使用本地存储(如wx.setStorageSync和wx.getStorageSync)或缓存(如wx.setStorageSync和wx.getStorageSync)来实现登录数据的持久化。
1.使用本地缓存
wx.setStorageSync('token', '登录凭证');
wx.setStorageSync('userInfo', { name: 'John', age: 25 });
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
const token = wx.getStorageSync('token');
const userInfo = wx.getStorageSync('userInfo');
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
19. 微信小程序和app有什么不同之处?
答案:微信小程序无需下载安装即可使用,而app需要下载安装;微信小程序更轻量级,占用空间小;app的功能和性能通常比小程序更强大。
20. 微信小程序如何进行双向绑定?
答案:微信小程序的双向绑定需要借助data来实现,并且需要使用this.setData()方法来更新视图。
<view>
<input type="text" />
<text>你输入的是: {{inputValue}}</text>
</view>
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
Page({
data: {
inputValue: ''
},
handleInput: function(e) {
this.setData({
inputValue: e.detail.value
});
}
});
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
21. 如何自定义tabbar?
答案:在app.json中配置tabBar字段,并在pages数组中配置每个页面的路径。
22. 小程序怎样使用自定义组件?
答案:先创建一个components文件夹用来存放所有自定义组件,然后在其中创建自定义组件的目录结构(包括wxml、wxss、js、json文件);在.json文件中进行自定义组件声明;在需要使用的页面的.json文件中引入自定义组件;最后在页面的.wxml文件中引用自定义组件。
23. 小程序本地存储(数据缓存)有哪些常用api?
答案:常用的api包括wx.setStorageSync(key, value)、wx.getStorageSync(key)、wx.removeStorageSync(key)等。
24. 微信小程序如何关联微信公众号?
答案:需要在微信公众号后台进行相关配置,并获取必要的信息(如AppID、AppSecret等),然后在小程序中进行相应的设置和调用。
25. webview中的页面怎么跳转回小程序?
答案:先在管理后台配置域名白名单,然后引入jweixin-1.3.2.js(https://res.wx.qq.com/open/js/jweixin-1.3.0.js),最后使用wx.miniProgram.navigateTo方法进行跳转。
26. 微信小程序如何实现分页加载数据?
答案:可以通过滚动监听(如onReachBottom事件)来检测用户是否滚动到页面底部,然后发起网络请求加载更多数据,并更新页面内容。
27. 小程序中的模态框如何实现?
答案:可以使用官方提供的模态框组件(如),也可以通过自定义组件来实现模态框的效果。
28. 微信小程序如何获取用户的位置信息?
答案:可以使用wx.getLocation接口来获取用户的地理位置信息,但需要注意获取用户授权。
29. 小程序中的图片如何实现懒加载?
答案:可以使用标签的lazy-load属性来实现图片的懒加载,或者通过第三方库来实现。
data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/HappyAcmen/article/details/145778719","extend1":"pc","ab":"new"}">>
id="blogExtensionBox" style="width:400px;margin:auto;margin-top:12px" class="blog-extension-box"> class="blog_extension night blog_extension_type1" id="blog_extension">
class="blog_extension_card" data-report-click="{"spm":"1001.2101.3001.6470"}" data-report-view="{"spm":"1001.2101.3001.6470"}">
class="blog_extension_card_left">
class="blog_extension_card_cont">
class="blog_extension_card_cont_l">
程序员泽明
class="blog_extension_card_cont_r">
微信公众号
新技术学习、能力提升、面试经验总结
评论记录:
回复评论: