
在小程序中,不允许直接d出用户授权的选择框,所以需要开发人员在界面上来设置提示信息,诱导用户点击,然后完成用户数据的录入和存取。在开发的过程中,某些请求是依托用户登录之后获取到的openId才能继续执行的,所以在页面上,某些数据渲染之前需要判断用户是否登陆,如若没有登录,怎样设计更好的交互来让用户登录。
使用小程序时,首先会进入到appjs这个文件中,这个文件里包含了俩个方法,一个是wxlogin(),另一个是wxgetSetting(),wxlogin()的目的是为了在用户登陆之后获取到一个对应的 code 值,然后通过这个值去自己的后台换取一个openId;wxgetSetting()第一是为了判断用户的授权范围,另一个是获取对应权限内的信息,比如说,用户授权小程序可以使用自己的基本信息,就可以在这个方法中获取到用户的头像、微信名、微信设置的城市这些字段,这就是一些需要掌握的基本流程,具体怎么实现登录呢?
在小程序中,官方给出了一种解决方案-button按钮:
在这个按钮中,有几个属性:
● type :按钮的类型,可以设置为primary,背景色为绿色
● wx:if :显示条件,内容分别为hasUserInfo和canIUse俩个字段,同时为真即可显示(俩个字段均需要在data中初始化赋值)
● open-type :按钮的功能类型,getUserInfo是为了获取基本信息(也可以设置为其他→getPhoneNumber:获取用户手机号)
● bindgetuserinfo :绑定的点击事件。在js中写对应的逻辑
在用户点击按钮之后,会出现一个d窗,确定用户是否授权 :
当用户点击允许之后,进入我们绑定的getUserInfo函数中:
在执行逻辑中,首先通过wxlogin()方法获取到用户对应的openId,方便后续的 *** 作,然后再通过wxgetUserInfo()来获取到用户的基本信息,发送请求,将基本信息入库存储,或者展示到页面上,就完成了登录流程。
1在登陆中可能会涉及到多个页面登陆成功之后的状态同步,可以通过 appgloableData 来实现,在全局对象中设置一个字段,然后不论在哪个页面实现了登录,都可以通过全局对象来完成更新。
2在 获取用户信息 的时候,有时候需要获取的是 中文类型 的数据,可以在 wxgetSetting() 的请求体中加一个 lang:'zh_CN'。 这样获取到的数据就是中文格式的了
本地存储分为异步和同步。
设置:
异步:wxsetStorage
同步:wxsetStorageSync
获取:
异步:wxgetStorage
同步:wxgetStorageSync
移除:
异步:wxremoveStorage
同步:wxremoveStorageSync
清除所有:
异步:wxclearStorage
同步:wxclearStorageSync
这里给大家以同步为例,
wxsetStorageSync('key','value')
接下来,我们说一下本地收藏功能怎么实现的呢
这是一个列表渲染页面,每一个view点进去的详情页面其实是一个页面,只是传不同的id,来赋值不同的数据展示出来而已。
通过JS文件中带参数的跳转,把相应的数据传到详情页中,那接下来就是展示详情页
通过wxrequest获取到服务器数据之后将数据(一个json对象)绑定至post数组,然后页面中获取数据的时候可以直接通过(数组名属性)直接取值。数组中有多个json对象的话,则需要wx:for遍历取值。
单个json对象数据绑定
页面取值:
在小程序中没有DOM *** 作的方法,所以获取不到相应的DOM节点进行高度设置。
解决方案
1css方案
<view class="{{isFold 'flod':'extend' }}" bindtap="flodFn">
我是一个很长的文字
</view>
flod{
//折叠样式
}
extend{
//展开样式
}
flodFn:function(){
thissetData({
isFold: !thisisFold
});
}
2动态渲染方案
<view bindtap="flodFn">
<view wx:if="{{isFold}}" >
我是一个很长的文字
</view>
<view wx:else>
我是一个很长的文字
</view>
</view>
flodFn:function(){
thissetData({
isFold: !thisisFold
});
}
这是因为 setData 方法只能设置一个值,而你在 consolelog 中打印了多行。
如果要在 pageData 中显示多行数据,可以将其更改为一个数组,并在循环中将每个时间推入数组中。例如:
let times = [];
// 循环中
let d = new Date(itemtimereplace(/-/g, '/'))getTime();
let time = timeHandle(d)
timespush(time);
// 循环结束后
thissetData({
pageData:times
})
如果你要显示最新的时间那么可以在循环结束后使用unshift方法添加到数组的第一个位置
在data里面定义一个变量,前台绑定到input里面,然后给通过事件,方法改变data里面的变量。
微信小程序
1,微信小程序,简称小程序,缩写xcx,英文mini program。是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。
2,应用将无处不在,随时可用,但又无需安装卸载。
3,微信小程序于2017年1月9日凌晨正式上线。张小龙随后在朋友圈发出一条写着“201719”的状态,同时配有 iPhone 一代的新品发布图。张小龙以这样的形式,向乔布斯致敬。
/计算器/
import javaawt;
import javaxswing;
import javaxswingborder;
import javaawtevent;
public class Calculator implements ActionListener{
JFrame frame;
JPanel panel;
JTextField tfShow;/定义显示文本框/
JButton b1[]=new JButton[10]; /数字按钮/
JButton b2[]=new JButton[6]; / *** 作按钮/
boolean isNumber;/判断是否输入多位数字的变量/
double number;/存储输入数值、显示结果的变量/
double result;/存储中间运算结果的变量/
char operator;/存储当前 *** 作符的成员变量/
public Calculator(){
frame=new JFrame("计算器");
framesetSize(300,300);/指定框架窗口的大小/
framesetResizable(false);/使框架窗口不可改变大小/
JPanel contentPane=(JPanel)framegetContentPane();
contentPanesetBorder(new EmptyBorder(20,20,20,20));/绘制框架的指定大小的空透明边框/
tfShow=new JTextField("0",25);/指定属性的文本域/
tfShowsetHorizontalAlignment(JTextFieldRIGHT);/设置文本域中文本的对齐方式/
isNumber=true;/初始值设置/
number=0;/初始值设置/
result=0;/初始值设置/
operator=' ';/初始值设置/
for(int i=0;i<b1length;i++){
b1[i]=new JButton(IntegertoString(i));/创建数字按钮/
b1[i]setActionCommand(IntegertoString(i));
b1[i]addActionListener(this);
b1[i]setForeground(Colorblue);
}
String bs[]={"/","","-","C","+","="};
for(int i=0;i<b2length;i++){
b2[i]=new JButton(bs[i]);/创建 *** 作按钮/
b2[i]setActionCommand(bs[i]);
b2[i]addActionListener(this);
b2[i]setForeground(Colorred);
}
panel=new JPanel();
panelsetLayout(new GridLayout(4,5));
paneladd(b1[1]);
paneladd(b1[2]);
paneladd(b1[3]);
paneladd(b2[0]);
paneladd(b1[4]);
paneladd(b1[5]);
paneladd(b1[6]);
paneladd(b2[1]);
paneladd(b1[7]);
paneladd(b1[8]);
paneladd(b1[9]);
paneladd(b2[2]);
paneladd(b1[0]);
paneladd(b2[3]);
paneladd(b2[4]);
paneladd(b2[5]);
frameadd(tfShow,BorderLayoutNORTH);/将文本框放置在框架上方/
frameadd(panel,BorderLayoutCENTER);/将装有按钮组的panel放在框架的中心/
framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);/设置框架窗口的默认窗口关闭 *** 作/
framesetVisible(true);/设置框架可见/
}
public double getDisplay(){/返回要显示的结果/
return number;
}
public void reDisplay(){/刷新文本域的内容/
tfShowsetText(""+getDisplay());
}
/对输入数字的处理/
public void numberProcess(int num){
if(isNumber&&num!=0){
String s1=IntegertoString(num);
String s2=IntegertoString((int)(thisnumber));
thisnumber=DoubleparseDouble(s2+s1);/对多位数字的处理/
}else{
thisnumber=num;
}
isNumber=true;/输入连续数字(即多位数字)时为真/
}
public void operationProcess(char operator){/根据输入的 *** 作符改变当前 *** 作符/
switch(operator){
case '-':
thisoperator='-';
break;
case '+':
thisoperator='+';
break;
case '':
thisoperator='';
break;
case '/':
thisoperator='/';
break;
}
result=number;
isNumber=false;/输入 *** 作符时表示输入连续数字的标记变量为假/
}
public void clear(){
number=0;
result=0;
}
public void equal(){/计算运算结果/
switch(operator){
case '-':
result=result-number;
break;
case '+':
result=result+number;
break;
case '':
result=resultnumber;
break;
case '/':
result=result/number;
break;
case ' ':
result=number;
break;
}
number=result; /把运算结果赋值给显示变量/
isNumber=false;
operator=' ';
}
public static void main(String args[]){
Calculator cal=new Calculator();/创建计算器/
}
public void actionPerformed(ActionEvent e){
String command=egetActionCommand();/获取按钮激发的 *** 作事件的命令名称/
char c=commandcharAt(0);/将按钮命令名称的第一个字符赋值给一个字符c/
switch(c){
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0':
int number=IntegerparseInt(command);
numberProcess(number);/输入数字的处理/
break;
case '+':
case '-':
case '':
case '/':
operationProcess(c);/算数运算符的处理/
break;
case '=':equal();break;/计算运算结果/
case 'C':clear();break;/清零/
}
reDisplay(); /在文本域中显示信息/
}
}
这是我做的一个计算器:运行截图
以上就是关于小程序-用户授权/授权后的信息读取流程全部的内容,包括:小程序-用户授权/授权后的信息读取流程、微信小程序--本地存储、小程序如往data里赋值数组等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)