61 })
1 // pages/demo/demo.js
2
3 //获取当前小程序对象实例
4 var app = getApp();
5 Page({
6
7 /**
8 * 页面的初始数据
9 /
10 data: {
11
12 },
13
14 /*
15 * 生命周期函数–监听页面加载
16 /
17 onLoad: function (options) {
18 app.foo();
19
20 },
21
22 /*
23 * 生命周期函数–监听页面初次渲染完成
24 /
25 onReady: function () {
26
27 },
28
29 /*
30 * 生命周期函数–监听页面显示
31 /
32 onShow: function () {
33 //在每次该界面唤醒时,获取当前页面的调用栈:
34 console.log(getCurrentPages());
35 console.log("当前调用栈中的页面数量: " + getCurrentPages());
36 console.log(getCurrentPages()[getCurrentPages().length - 1] == this);
37 },
38
39 /*
40 * 生命周期函数–监听页面隐藏
41 /
42 onHide: function () {
43
44 },
45
46 /*
47 * 生命周期函数–监听页面卸载
48 /
49 onUnload: function () {
50
51 },
52
53 /*
54 * 页面相关事件处理函数–监听用户下拉动作
55 /
56 onPullDownRefresh: function () {
57
58 },
59
60 /*
61 * 页面上拉触底事件的处理函数
62 /
63 onReachBottom: function () {
64
65 },
66
67 /*
68 * 用户点击右上角分享
69 */
70 onShareAppMessage: function () {
71
72 }
73 })
三.界面层–数据绑定
在程序的开发过程中,界面层提供一种模板机制,可以借助一种特殊的语法来完成数据的绑定,将动态的数据绑定到模板当中,最近将嵌入过后的数据显示到界面中,小程序中使用的是Mustache 语法(双大括号)语法:
1
2
3
7
8
9
10
1 // pages/demo/demo.js
2
3 Page({
4 //为页面提供数据,界面和逻辑之间的桥梁
5 data:{
6 message:“hello world”,
7 person:{
8 name: “张三”,
9 age:25
10 }
11 }
12 })
–数据绑定语法补充,除了在页面标签的内部我们会使用Mustache语法进行输出,在标签的内部,我们也可以使用Mustache语法:
1
2
3
7
8
9
10
14
15
16
17
18
19
20
21
24 复选框1
25 复选框2
26
四.列表渲染
在逻辑层中,很多的情况下都会是一个数组类型的数据(列表数据),那么此时在我们的界面层中就需要使用到列表渲染:
1
4 复选框1
5 复选框2
6
7
8
20
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
五.事件处理
1
3 点击
1 buttonTapHandle: function(e){
2 console.log(“点击按钮打印此条.”);
3 // console.dir()将一个对象以树状的形式打印到控制台,便于我们调试复杂对象
4 console.dir(e);
5 }
六.事件冒泡
1
4
5
6
1 innerHandler: function(){
2 console.log(“触发内部事件”);
3 },
4 outerHandler: function(){
5 console.log(“触发外部事件”);
6 }
七.事件传参
1
8 参数事件
1 handleWithParm(e){
2 console.log(e); //获取当前的点击元素
3 console.log(e.target.dataset); //获取元素上所有data-[xxx]属性的集合
4 }
八.单向数据流
1
4
5
6
7
1 inputHandler: function(e) {
2 //e.detail.value 获取到当前输入的值
3 console.log(e.detail.value);
4 //小程序中的数据绑定,本质上是一次绑定,在绑定完成之后,并不会去监视数据的变化.如果想要得到此次的变化,那么就需要使用setData的方法进行改变
5 //setData是用来改变data数据的,与直接赋值区别在于setData可以通知界面作出变化,而直接赋值的话没有办法实现这一点(早期的JS无法实现)
6 this.setData({
7 inputMessage: "您输入的内容: " + e.detail.value
8 })
9 console.log(this.data.message);
10 }
九.登录页面案例
1
2
3
4 <input class=“username” placeholder=“请输入用户名” style=“border:1px solid #000”
5 value=“{{ username }}” bindinput=“usernameChangeHandler”/>
6 <input class=“password” type=“password” placeholder=“请输入密码” style=“border:1px solid #000”
7 value=“{{ password }}” bindinput=“passwordChangeHandler”/>
8
9
10 登录
11 注册
12
13
1 // pages/login/login.js
2 /* 实现登录界面
3 1. 设计数据的结构(data属性)
4 2. 将数据绑定到指定的元素上
5 */
6 Page({
7 data: {
8 username: “”,
9 password: “”
10 },
11 //用于处理登录按钮点击的事件
12 buttonLogin: function() {
13 console.log(“执行登录事件”);
14 },
15 //用于处理注册按钮点击的事件
16 buttonRegister: function() {
17 //1. 首先需要知道用户输入了什么
18 console.log(this.data.username + " " + this.data.password);
19 //2. 根据用户输入的值去判断
20 //3. 根据判断的结果做出响应
21 console.log(“执行注册事件”);
22 },
23 //用户输入用户名
24 usernameChangeHandler: function(e) {
25 this.setData({
26 username: e.detail.value
27 })
28 },
29 //用户输入密码
30 passwordChangeHandler: function(e) {
31 this.setData({
32 password: e.detail.value
33 })
34 }
35 })
十.抽象共同的事件处理函数
如我在我们的代码之中为每一个input标签都增加一个事件绑定函数,那么在我们的代码之中,将会存在很多的重复代码,为了避免这样的的情况,我们可以抽象共同的事件处理函数:
1
2
3
4 <input class=“username” placeholder=“请输入用户名” style=“border:1px solid #000”
5 value=“{{ username }}” bindinput=“inputChangeHandler” data-name=“username”/>
6 <input class=“password” type=“password” placeholder=“请输入密码” style=“border:1px solid #000”
7 value=“{{ password }}” bindinput=“inputChangeHandler” data-name=“password”/>
8
9
10 登录
11 注册
12
13
1 // pages/login/login.js
2 /* 实现登录界面
3 1. 设计数据的结构(data属性)
4 2. 将数据绑定到指定的元素上
5 */
6 Page({
7 data: {
8 username: “”,
9 password: “”
10 },
11 //用于处理登录按钮点击的事件
12 buttonLogin: function() {
13 console.log(this.data.username + " " + this.data.password);
14 console.log(“执行登录事件”);
15 },
16 //用于处理注册按钮点击的事件
17 buttonRegister: function() {
18 //1. 首先需要知道用户输入了什么
19 console.log(this.data.username + " " + this.data.password);
20 //2. 根据用户输入的值去判断
21 //3. 根据判断的结果做出响应
22 console.log(“执行注册事件”);
23 },
24 //用户输入用户名
25 // usernameChangeHandler: function(e) {
26 // this.setData({
27 // username: e.detail.value
28 // })
29 // },
30 //用户输入密码
31 // passwordChangeHandler: function(e) {
32 // this.setData({
33 // password: e.detail.value
34 // }),
35 // console.log(e);
36 // }
37 //抽象上述两个方法,完成事件
38 inputChangeHandler: function(e) {
39 var key = e.target.dataset.name;
40 var value = e.detail.value;
41 var changed = {};
42 changed[key] = value;
43 this.setData(changed);
44 }
45 })
–除此之外,我们还可以使用表单的方式来进行数据的接收,这样可以免除这一些列复杂的操作:
1
2 <input class=“username” placeholder=“请输入用户名” style=“border:1px solid #000”
3 value=“{{ username }}” name=“username” />
4 <input class=“password” type=“password” placeholder=“请输入密码” style=“border:1px solid #000”
5 value=“{{ password }}” name=“password” />
6
7
8 登录
9 注册
10
1 //使用表单提交的方式来完成数据接收
2 loginSubmit: function(e){
3 console.log(e.detail.value);
4 }
十一.条件渲染
1
2
最后
今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【算法合集】
【延伸Android必备知识点】
【Android部分高级架构视频学习资源】
Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
65216950)]
【延伸Android必备知识点】
[外链图片转存中…(img-3geWw6tc-1715265216950)]
【Android部分高级架构视频学习资源】
Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!