微信小程序 之三元运算符代替wx:if 来解决背景图片显示隐藏
最近在开发一个小程序项目时,碰到一个问题,
在一个多条件单项选择中,为选中条件添加一个选中状态,选中状态为灰色背景,但是这个背景要用到背景图片
大家都知道在小程序 中wxss是无法读到本地图标资源,只能使用外部链接和base64,
这俩种方法都不适合我们开发的时候使用,
但是却可以在wxml中使用style="background-image: url(../../images/workingMode/pattern-ac.png);"方法
然后通过条件判断来控制是否渲染
但是在小程序中,wx:if又只能控制整条内容,使用起来还要多写2个一样的模块,真的是非常不爽
那么有没有一种类似jquery的addClass方法呢?答案是有的,那就是这里要讲的三元运算符。
1,使用小程序的wx:if方法来实现class添加和删除
<text class="money on" wx:if="{{item.modeId==default}}>{{item.platformPrice/100}}元</text>
<text class="money" wx:else>{{item.platformPrice/100}}元</text>
使用三元运算符来实现class添加删除
<text class="money {{item.modeId==default ? 'on' : ''}}">{{item.platformPrice/100}}元</text>
2,使用小程序的wx:if方法来实现style的添加和删除
<radio-group class="weui-grids" bindchange="radioChange">
<label class='weui-grid' wx:for="{{radioItems}}" wx:key="index">
<radio class="weui-check" value="{{item.modeId}}" data-orderAmount="{{item.platformPrice}}" /> <view class="weui-grid-box" wx:if="{{item.modeId==default}} style="background-image: url(../../images/workingMode/pattern-ac.png);" >
<view class="weui-grid__label head-title">{{item.modeName}}</view>
<view class="weui-grid__icon">
<image class='phone-icon' style="width: {{imagewidth}}px; height: {{imageheight}}px;" bindload="imageLoad" src='{{item.imgSrc}}'></image>
</view>
<view class="weui-grid__label bott-title">
金额<text class="money">{{item.platformPrice/100}}元</text>时长<text class="time">{{item.modeTime}}分钟</text>
</view>
</view> <view class="weui-grid-box" wx:else>
<view class="weui-grid__label head-title">{{item.modeName}}</view>
<view class="weui-grid__icon">
<image class='phone-icon' style="width: {{imagewidth}}px; height: {{imageheight}}px;" bindload="imageLoad" src='{{item.imgSrc}}'></image>
</view>
<view class="weui-grid__label bott-title">
金额<text class="money">{{item.platformPrice/100}}元</text>时长<text class="time">{{item.modeTime}}分钟</text>
</view>
</view>
</label>
</radio-group>
使用三元运算符来实现style添加删除
<radio-group class="weui-grids" bindchange="radioChange">
<label class='weui-grid' wx:for="{{radioItems}}" wx:key="index">
<radio class="weui-check" value="{{item.modeId}}" data-orderAmount="{{item.platformPrice}}" />
<view class="weui-grid-box" style="{{item.modeId == default ? onShow: 'background-image: url(../../images/workingMode/pattern-ac.png);'}}" >
<view class="weui-grid__label head-title">{{item.modeName}}</view>
<view class="weui-grid__icon">
<image class='phone-icon' style="width: {{imagewidth}}px; height: {{imageheight}}px;" bindload="imageLoad" src='{{item.imgSrc}}'></image>
</view>
<view class="weui-grid__label bott-title">
金额<text class="money">{{item.platformPrice/100}}元</text>时长<text class="time">{{item.modeTime}}分钟</text>
</view>
</view>
</label>
</radio-group>
不过上面这个方法得到的结果却是反值 ,虽然将条件置反【item.modeId != default】也能实现效果,但是逻辑却相反,思索应该是onShow: 'backgr...'中的:被解释成了else,
待以后再想办法解决这个问题,不过大体来说功能却是实现了
备注:仔细研究了java的三元表达式后,原来是前面的方法用错了,:不能用作赋值,它就是else的意思
正确写法如下
<view class="weui-grid-box" style="{{item.modeId == default ? 'background-image: url(../../images/workingMode/pattern-ac.png);' : null}}" >
后面给出页面的初始值和点击切换功能的代码
Page({
/**
* 页面的初始数据
*/
data: {
radioItems: [
{modeId:1, modeName: '加强洗', time:'30分钟',modeTime: 30, platformPrice:500,imgSrc:'../../images/workingMode/pattern-1.png'},
{modeId:2, modeName: '标准洗', time: '30分钟', modeTime: 30, platformPrice: 400,imgSrc:'../../images/workingMode/pattern-1.png'},
{modeId:3, modeName: '快速洗', time: '30分钟',modeTime: 30, platformPrice: 300,imgSrc:'../../images/workingMode/pattern-1.png'},
{modeId:4, modeName: '单脱水', time: '30分钟',modeTime: 30, platformPrice: 100,imgSrc:'../../images/workingMode/pattern-1.png'},
],
default:2,
onShow:'',
},
radioChange: function (e) { //洗衣模式选择事件
// console.log('radio发生change事件,携带value值为:', e.detail.value);
var radioItems = e.detail.value;//获取每次点击事件的值
this.setData({
default: radioItems //将点击值赋值给默认值并在页面渲染出来
});
var radioList = this.data.radioItems;
for (var i = 0; i < radioList.length; i++) { //匹配洗衣模式集合中的modeId,
if (radioItems == radioList[i].modeId){
this.setData({
orderAmount: radioList[i].platformPrice //成功后取出价格存为全局data
});
}
}
},
})
效果图:

微信小程序 之三元运算符代替wx:if 来解决背景图片显示隐藏的更多相关文章
- 微信小程序页面跳转导航wx.navigateTo和wx.redirectTo
}) wx.redirectTo(OBJECT) 关闭当前页面,跳转到应用内的某个页面. 还是用上面的三张图示作为例子,当使用wx.redirctTo接口跳转页面时,原来的页面将被删除掉,当然,这是小 ...
- 微信小程序的ajax数据请求wx.request
微信小程序的ajax数据请求,很多同学找不到api在哪个位置,这里单独把小程序的ajax请求给列出来,微信小程序的请求就是wx.request这个api,wx.request(一些对象参数),微信小程 ...
- 微信小程序在开发中遇到的问题与解决方法
1. √ 这种错误多半是该js文件中没有Page这个方法,就算是空的js也必须要把Page({ })写上去 2. √ 这种错误多半是该json文件没有内容,所以必须要加上{ },就算是空内容也要加 ...
- 微信小程序开发《三》:微信小程序请求不能使用session的原因及解决办法
本人在前面的微信小程序开发<二>中提到要想在服务端保持状态需要在客户端第一次请求服务器的时候给客户端返回一个sessionid,由客户端在本地保存,下次请求的时候在header里面带上这个 ...
- 微信小程序里如何用阿里云上传视频,图片。。
纯手写,踩了半天多的坑干出来了... 网上也有对于阿里云如何在微信小程序里使用,但是很不全,包括阿里云文档的最佳实践里. 话不多说上代码了. upvideo(){ var aliOssParams = ...
- 微信小程序分享朋友圈的实现思路与解决办法
实现思路 那么既然小程序没有分享到朋友圈的api,我们怎么实现分享到朋友圈呢,下面我介绍一下实现思路. 既然没有捷径,那就走复杂一点的路线,那就是需要用户手动分享到朋友圈,问题又来了,用户手动分享的话 ...
- 微信小程序子组件样式不起作用的解决办法
今天我在编写微信小程序项目时,发现父组件引用子组件过后,子组件的样式不起作用,在上网查了很多解决办法后,成功解决了这一问题. 解决办法: 1.在全局样式文件app.wxss中引入子组件的样式,如 @i ...
- [微信小程序]字体文件,字体图标(.ttf,.woff,woff2)等无法显示问题
一. 背景 项目引用了第三方UI框架Vant-weapp,但是前几天Vant的cdn被运营商封禁,导致van-icon无法使用. 有赞官方在Github上给出了在小程序app.wxss上添加以下代码的 ...
- 微信小程序使用三元表达式切换图片
1.data里定义切换图片的地址和切换的标识 data:{ show:true, yes:"http://101.89.144.168:9090//files/jk/yd/images/in ...
随机推荐
- SSL免费证书申请以及nginx配置https流程记录
设置https需要ssl 证书,可以通过FreeSSL[https://freessl.org/]申请. 流程记录: 输入域名,如 http://www.youdias.xin 选择品牌,如Let's ...
- Hibernate知识梳理
一.SessionFactory接口 是单个数据库映射关系(ORM)经过编译后的内存镜像.SessionFactory(的实例)作为应用中的一个全局对象(工厂),可以随处打开/创建一个session, ...
- 连通图 poj2186 最受欢迎的牛(求最受欢迎的牛的数量)
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27531 Accepted: 11077 De ...
- C/C++、Java、Python谁是编译型语言,谁是解释型语言?
最近各大互联网公司线上笔试,编程题目里的编译器只支持C/C++.Java,甚至有的支持javaScrpit和Pascal,就是不支持Python.让一直以来用惯了Python的我直吐血,于是今天痛定思 ...
- 【Luogu】P4035球形空间产生器(高斯消元)
题目链接 水比题,把圆方程展开减一下把平方都减掉半径的平方也减掉,高斯消元即可. 然后我只输出两位小数,爆了两次零.我好菜啊. #include<cstdio> #include<c ...
- 【Luogu】P3224永无乡(splay)
题目链接 splay模板,启发式合并(其实就是暴力插入)即可. 顺便吐槽时限,带垃圾回收而已……不至于最后一个点死活不让过吧? #include<cstdio> #include<c ...
- BZOJ 3626 [LNOI2014]LCA ——树链剖分
思路转化很巧妙. 首先把询问做差分. 然后发现加入一个点就把路径上的点都+1,询问的时候直接询问到根的路径和. 这样和原问题是等价的,然后树链剖分+线段树就可以做了. #include <map ...
- [luoguP2774] 方格取数问题(最大点权独立集)
传送门 引入两个概念: 最小点权覆盖集:满足每一条边的两个端点至少选一个的最小权点集. 最大点权独立集:满足每一条边的两个端点最多选一个的最大权点集. 现在对网格染色,使得相邻两点颜色不同,之后把两个 ...
- BZOJ4817 [Sdoi2017]树点涂色 【LCT + 线段树】
题目 Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这 ...
- BZOJ4316 小C的独立集 【仙人掌】
题目 图论小王子小C经常虐菜,特别是在图论方面,经常把小D虐得很惨很惨. 这不,小C让小D去求一个无向图的最大独立集,通俗地讲就是:在无向图中选出若干个点,这些点互相没有边连接,并使取出的点尽量多. ...