轻源码

  • QingYuanMa.com
  • 全球最大的互联网技术和资源下载平台
搜索
一起源码网 门户 微信小程序 查看主题

官方问答《二十一》用setData修改数组,动态获取view的高度

发布者: cscwsn | 发布时间: 2017-10-8 07:39| 查看数: 2948| 评论数: 1|帖子模式

都放假了,官方社区也没人了,就几个问题,凑合着看一下吧;所以我又收集了一些sf的问题,凑合成一个帖子方便看; 
从这期开始,我将开始标注回答者的id,优秀的回答,我将标注原回答链接;

问题: 
关于二维码接口问题?网上还是挺多人问的,就是没答案调用二维码接口后返回如图数据 

 
1、这是什么格式数据,我用二进制和base64保存起来,图片都是打不开的。。 
2、好像返回的数据都是变化的吗?这样是不是说,每次二维码都是一次性的?不能长久使用,需要用的时候就需要调用? 
3,二维码文档怎么说每天最多调1000次,总数不限;而在下载那却说总的10000次;到底哪个为准??

答:回答者:jeremy 
二进制直接保存,不要base64。 
二维码是永久生效的。 
目前是100000次,这个后来调整过,我们修改一下文档。

问题: 
的indicator-style 不支持数据绑定? 
的indicator-style不支持数据绑定?

如下: 

通过Page.setData({height:'40px'});设置高度无效!

答:回答者:超哥 
你这样试试:

  1. <picker-view indicator-style="{{indicatorStyle}}"></picker-view>
  2. Page.setData({indicatorStyle:'height:40px;'});

问题: 
使用picker objectArray 是如何使用

  1. <picker bindchange="Pickerarrive" value="{{indexrive}}" range="{{objectArray}}" range-key="{{name}}">

请给案例好?

答:回答者:超哥 
就是定义这个picker内容的数组 

 

问题: 
关于微信小程序中canvas的显示层级问题 canvas是不是默认具有最高显示层级?为什么弹出层总是盖不住canvas 
答:回答者:ltzz 
map,video,canvas,textarea是原生组件,层级位于webview之上。

问题: 
onPullDownRefresh 在ios中无效 下拉刷新事件在ios中无效啊,根本不执行,用scroll-view的话,上拉是直接触顶就触发的,有设么方法解决呢? 
答:回答者:安好 
app.json里有这个配置"enablePullDownRefresh": true这个属性为true才可以下拉,我原先这个是加了引号了所以不行,这里的true不能加引号,还有就是你的这个文件的json这里的enablePullDownRefresh这个属性也检查一下,app。json是全局的,这里写了,单个文件就不用写了 
scroll-view有自己的触顶和触底事件 所以使用scroll-view时,估计是它自己的触顶事件优先级高,所以 
onPullDownRefresh没有被触发

问题: 
开发者工具可以增加编辑器字体大小吗?编辑器字体太小了,看时间长了很不舒服发,增加字体大小吗? 
答:回答者:林超 
抱歉,目前还不行

编辑器部分之前设计的非常仓促,我们后续会继续做优化

问题: 
小程序能否对本地服务器发起HTTPs Request? 
能否对https://localhost/test.php发起请求? 
在本地做测试。 
......................补充...........................................

  1. wx.request({
  2. url : 'https://localhost/test/1.php',
  3. data : {},
  4. success : function(res){
  5. console.log('ok');
  6. },
  7. fail : function(res){
  8. console.log('error');
  9. }
  10. })

https://localhost/test.php能在浏览器中访问。

答:回答者:Fundebug 
可以的。 
比如可以用创建Image对象的方式发送GET请求:

  1. var img = new Image();
  2. img.src = "http://locahost:8080/index.html;

另外,可以使用wx.request发送更为复杂的请求,不过,wx.request发起的是 HTTPS 请求。

补充:可以通过在开发者工具内设置不检验域名,具体参考:forum.php?mod=viewthread&tid=2441

问题: 
微信web开发者工具 "当前系统代理不是安全代理"怎么搞? 
如果我点了确定之后扫码会提示如下图所示的提示 

 
问了好多人,搜了好多资料,有的说证书过期,有的说代理不行,但是我选了左上角的代理,设置为"不使用任何代理,勾选后直连网络"还是提示这种错误,到底要怎么办啊,,求解答,死也要死的明白点啊... 
答:回答者:吴统威 
微信开发者工具,为了信息安全性,首先检查了系统代理。 
这个问题是某些代理软件, 将代理设置填入到了系统注册表中,将注册表中的代理相关参数删除,然后注销一下,重新登录系统,就可以解决了

  1. [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings]
  2. "ProxyEnable"=dword:00000001
  3. "ProxyServer"="192.168.2.02:8087"
  4. "ProxyOverride"="192.168.*"

把相关的Proxy*参数删除,删除后记得重新登录系统

问题: 
微信小程序 不支持 css3 @keyframes 吗 
在微信小程序的 app.wxss 写了如下 结果报错了

  1. @keyframes spin {
  2. 0% {
  3. transform: rotate(0deg);
  4. }
  5. 100% {
  6. transform: rotate(-360deg);
  7. }
  8. }

 
答:回答者:夕君

由于 是用过 sass 编写,autoprefixer 自动加了前缀 ,把 moz 前缀去了ok了

问题: 
微信小程序取消授权后,重新进入,无法再次弹出授权提示框 
微信小程序用户取消授权后,再次进入,不会再弹出授权提示框了,那怎么才能拿到用户的信息呢再调用接口会报 getUserInfo:fail auth deny 的提示。 
答:回答者:LL89757 
重新授权需要用户删除小程序并重新添加,或者隔一段时间(10分钟),授权弹窗会重新出现

问题: 
wx.request引起的整个项目重新加载如何解决 
用小程序写了一个TODOlist demo,用json-server模拟的接口。 
现在的问题是只要是使用wx.request发起请求的操作(如删除todo条目,提交新todo等)都会引起整个项目的重新加载,又从首页开始从新进入,如何避免这种刷新?应该如何解决? 
代码示例。。别的好几个请求差不多形式。。

  1. pageParams.addTodo = function(event) {
  2. const that = this
  3. let newValue = {
  4. desc : event.detail.value.input,
  5. completed : false
  6. }
  7. if(event.detail.value.input){
  8. wx.request({
  9. url: URL,
  10. data: ({
  11. desc : event.detail.value.input,
  12. completed : false
  13. }),
  14. header: { 'content-type': 'application/json' },
  15. method: 'POST',
  16. success: res => {
  17. that.setData({
  18. todos: res.data
  19. })
  20. },
  21. fail: () => console.error('something is wrong'),
  22. complete: () => console.log('wtf')
  23. })
  24. }
  25. else{ console.log('null')}

答:回答者:Yukihala祝

原因是因为用本地的json文件模拟的端口,而我把这个json文件顺手放在了项目文件里。 
这个开发工具里有一个这个设置

问题: 
微信小程序怎么动态获取view的高度,这个高度不是写死的点击每一个高度会撑开,默认一行overflow:hidden,撑开了高度没法动态获取了 

 
答:回答者:Di,回答地址 
在小程序中没有DOM操作的方法,所以获取不到相应的DOM节点进行高度设置。 
解决方案 
1.css方案

  1. <view class="{{isFold ?'flod':'extend' }}" bindtap="flodFn">
  2. 我是一个很长的文字
  3. </view>
  1. .flod{
  2. //折叠样式
  3. }
  4. .extend{
  5. //展开样式
  6. }
  1. flodFn:function(){
  2. this.setData({
  3. isFold: !this.isFold
  4. });
  5. }

2.动态渲染方案

  1. <view bindtap="flodFn">
  2. <view wx:if="{{isFold}}" >
  3. 我是一个很长的文字
  4. </view>
  5. <view wx:else>
  6. 我是一个很长的文字
  7. </view>
  8. </view>
  1. flodFn:function(){
  2. this.setData({
  3. isFold: !this.isFold
  4. });
  5. }

问题: 
小程序中data里的数据setData里面key的值用变量表示

  1. data:{
  2. check1:"",
  3. check2:"",
  4. nocity: true,
  5. showprovtype:'',
  6. showMask:false
  7. }

在setData中怎么用变量表示key值,key可能为check1 or check2

  1. bindChangefunction (){
  2. this.setData({
  3. key: value,
  4. })
  5. }

key 是一个变量; 
我的错误写法:

  1. bindChangefunction (){
  2. var _key = '';
  3. this.data.showprovtype == 'check1'? _key ='check1':_key='check2';
  4. this.setData({
  5. _key: value,
  6. })
  7. }

虽然最后我还是用个判断完成,想知道这样的思路能实现吗? 
答:回答者:Di

解决方案 []替换

  1. var _key = '';
  2. _key = this.data.showprovtype == 'check1'? 'check1':'check2';
  3. var temData = {};
  4. //重点是这里
  5. temData[_key] = value;
  6. this.setData(temData);

问题: 
微信小程序 某个页面直接返回首页 
目前想实现一个功能是打开小程序后,到三级页面后点击左上角的返回按钮,能够直接返回到首页 

 
看文档 
wx.navigateBack 这个方法可以返回界面 在 onUnload 触发的时候可以执行。但是我发现这个方法确实可以回到首页,但是他会一个一个界面返回,不能直接返回到首页 
 
哪位大神能够帮忙看看 这个怎么实现 万分感谢 
已经找到解决的办法了 
正常 A -> B -> C 都是通过 wx.navigateTo 跳转的,所以 wx.navigateBack 只能返回上一界面,如果要返回到A 界面就会出现 C -> B -> A 的效果。 
如果想实现 A -> B -> C 当 C 点击返回时, 实现直接 C -> A 这种效果 就只能 
A -> B 通过 wx.navigateTo 跳转 B -> C 通过 wx.redirectTo 跳转.跳转触发后 B 页面就会被销毁, C 页面再返回 wx.navigateBack 就会直接到 A 了 
 
答:回答者:GIS_XX,原文地址: 
正常 A -> B -> C 都是通过 wx.navigateTo 跳转的,所以 wx.navigateBack 只能返回上一界面,如果要返回到A 界面就会出现 C -> B -> A 的效果。

如果想实现 A -> B -> C 当 C 点击返回时, 实现直接 C -> A 这种效果 就只能

A -> B 通过 wx.navigateTo 跳转 B -> C 通过 wx.redirectTo 跳转.跳转触发后 B 页面就会被销毁, C 页面再返回 wx.navigateBack 就会直接到 A 了

问题: 
如何用setData修改数组? 
学习微信小程序的小白一枚,在操作array更新时,遇到问题:html如下:

  1. <view class="todo-item" wx:for="{{todos}}" bindtouchend="showDeleteBtn" id="{{index}}">
  2. ...
  3. <icon type="clear" color="red" hidden="{{item.isDelete? false: true}}"></icon>
  4. </view>

JS如下:

  1. Page({
  2. data: {
  3. todos: [{id: 0, text:'abc', isDelete: false}]
  4. },
  5. //事件处理函数
  6. ...
  7. showDeleteBtn: function(event){
  8. var index = event.currentTarget.id;
  9. var deletedTodo = "todos["+index+"].text";
  10. this.setData({
  11. deletedTodo: true
  12. });
  13. }
  14. })

根据文档,如果修改array里面某个具体值,是可以采用'array[0].text':'changed data'这种格式的: 

 
可为什么在我的例子里面,isDelete属性值就是不会被修改呢? 
到底程序错在那里? 
求大神解答,万分感谢!!! 
回答:回答者:回归四季 
这样试试:

  1. showDeleteBtn: function(event)
  2. {
  3. var index = event.currentTarget.id;
  4. this.data.todos[index].isDelete = true;
  5. this.setData(
  6. {
  7. todos: this.data.todos
  8. });
  9. )

**回答者:**yaohuiye,回答地址 
按你的方式,修改,代码如下: 

通过表达式生成的key值,并没有生效,setData方法还是将变量的名称而不是变量指向的值作为key值。可以看下,AppData中的数据,如下,是生成了一个deletedTodo的属性: 
 
解决方法是先通过index取出数组中的目标元素,然后对这个目标元素的属性进行修改。此时,则可以进行修改,如下所示: 

最新评论

ⓛⓞⓥⓔ 发表于 2022-4-28 10:41
怎么看网站的源代码

浏览过的版块

轻源码让程序更轻更快

QingYuanMa.com

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表