微信小程序继续入坑指南

微信小程序继续入坑指南

wxml

类似于html

感觉和ejs灰常的相似

数据绑定

js

Page({data: {message: "hello world"}
})

wxml

<view>{{message}}</view>

使用的是https://mustache.github.io/模板引擎系统

对组件的属性和控制属性的更改

<view id="item-{{id}}"></view>
Page({data: {message: "hello world",id: 3}
})

关键字

对布尔型的进行解析

<checkbox checked="{{false}}"></checkbox>

将会解析成为布尔值的false

运算

模板引擎支持布尔运算

三目运算

<view hidden="{{flag?true:false}}"></view>

当变量的flag的值为真的时候输出true,否输出false

算术运算

<view>{{a+b}}+ {{c}}</view>

支持最简单的算术运算

逻辑判断

<view>{{a>2}}+ {{c}}</view>

字符串运算

<view>{{"hello" + message}}</view>

对对象进行访问

<view>{{object.key}}</view>

同样支持变量

数组

<view>{{[zero, 1, 2, 3]}}</view>

直接进行组合,其中zroe的值为0
组合以后渲染为
0, 1, 2, 3

对象

template

ps w3c组织也规定了该标签,该标签也为模板

<template name="msgItem"><view><text> {{index}}: {{msg}} </text><text> Time: {{time}} </text></view>
</template>
<template is="msgItem" data="{{index: item.index,msg: item.index, time: item.time}}"></template>
Page({data: {item: {index: 0,msg: "222",time: "333"}}
})

使用模板,进行重复的利用,减少了重复代码的书写

同样也可以使用扩展运算符,进行扩展
上方的使用扩展运算符

<template name="msgItem"><view><text> {{index}}: {{msg}} </text><text> Time: {{time}} </text></view>
</template>
<template is="msgItem" data="{{...item}}"></template>

彻底的完成了扩展
输出正常的内容
如果变量名有冲突,前面的会覆盖后面的

列表渲染

wx:for 对数组进行重复的渲染

类似于使用for in 循环一样

<view wx:for="{{array}}">{{index}}:{{item.msg}}
</view>
Page({data: {array: [{msg: 'foo',}, {msg: 'bar'}]}
})

上方完成了一次列表渲染,其中index为默认的遍历到的数组的小标,从0开始,item为当前遍历到的数组对应下标的元素。
其中wx:for-itm为指定当前的元素,wx:for-index为指定当前元素的小标

输出九九乘法表

<view wx:for="{{[1,2,3,4,5,6,7,8,9]}}" wx:for-item="i"><view wx:for="{{[1,2,3,4,5,6,7,8,9]}}" wx:for-item="j"><view wx:if="{{i <= j}}">{{i}} * {{j}} = {{i * j}}</view></view>
</view>

block

block为一个块,用于控制一些内容

<block wx:for="{{[1,2,3,4]}}"><view>{{index}}</view><view>{{item}}</view>
</block>

wk:key

此为给框一个唯一的标识符号,类似于网页中的id,无论列表如何变化,此id永远不变,一直标识一个内容

Page({data: {objectSwitch: [{id: 0,unique: "unique_0"}, {id:1,unique: "unique_1"}, {id:2,unique: "unique_2"}]},addSwitch: function (e) {// 获取当前的最大的按钮数const length = this.data.objectSwitch.length;// 添加一个新数组的项,将其推入数组中this.data.objectSwitch = [{ id: length, unique: "unique_" + length }].concat(this.data.objectSwitch);// 重新进行页面的渲染this.setData({objectSwitch: this.data.objectSwitch})}
})
<switch wx:for="{{objectSwitch}}" wx:key="unique">{{item.id}}, {{index}}</switch>
<button bindtap="addSwitch">添加一个选项</button>

14.gif

条件渲染

wx:if条件渲染

templat

为模板,支持代码的复用

事件

和网页类似
不过这个是视图到逻辑的通信方式。

bindtap

进行事件的绑定

冒泡和非冒泡

ps 发现知晓程序 https://minapp.com/miniapp/ 好滴,写完后继续上。肯定要写插件喽

bind和catch后面跟上事件类型。
tap为手指触摸以后马上离开,或者是touchmove事件,手指触摸以后移动
例如 bindtap事件为手指触摸以后马上离开

在网页中也有触摸事件 https://developer.mozilla.org/en-US/docs/Web/API/Touch_events/Using_Touch_Events https://developer.mozilla.org/zh-CN/docs/Web/API/Touch_events 其中文档给有一个栗子,该栗子是进行在移动设备上绘图,额,暂时不想看,目前该方案只有chrome实现

catch事件的绑定可以阻止冒泡事件向上传播。

ps 只要冒泡,没有传播

<view id="outer" bindtap="handleTap1"><view id="middle" catchtap="handleTap2"><view id="inner" bindtap="handleTap3"></view></view>
</view>

在上方事件中,点击inner会触发handleTap3,接着冒泡到handleTap2,接着继续冒泡到handleTap2 如果除法middle将会止步于当前的冒泡。

捕获

换了一个名词而已。约等于网页开发中的传播

即事件先传播到顶层,在往下捕获,到底部以后在往上进行冒泡。事件一共经历了先往上,在往下,再次往上的过程。来源于网景和ie的那一场战争。战争遗留的内容。

capture-bind

以及

capture-catch

使用这两个关键字可以完成对事件的捕获。


<view id="outer" bind:touchstart="handleTap1" capture-bind:touchstart="handleTap2"><view id="inner" bind:touchstart="handleTap3" capture-bind:touchstart="handleTap4"></view>
</view>

当点击inner的时候,会先传播,即传播到最顶层,被outer捕获,除法handleTap2事件,继续往下传播,传播到inner,触发handleTap4事件,接着冒泡,触发inner的handleTap3事件,接着触发outer的handleTap1事件。

事件数据回传

事件数据回传到逻辑层
以data开头,多个单词以-连接,将会转为驼峰命名法,如果有大写字母,将会全部转为小写

是滴,在html5中也有这样通过属性读值的方式。切记,在mvvm框架中,不可操作dom,数据和视图是完全分隔的。

Page({bindViewTap: (event) => {var data = event.currentTarget.dataset.alphaBeta;var data2 = event.currentTarget.dataset.alphabeta;console.log(data);console.log(data2);}
})
<view data-alpha-beta="1" data-alphaBeta="2" bindtap="bindViewTap">点击一下</view>

是滴,这样就完成了视图层数据通知到逻辑层。

事件对象

当事件被触发的时候,处于逻辑层的回调函数,将会接收到一个事件对象

Page({touch: (baseEvent) => {console.log(baseEvent);}
})
<button bindtap="touch">点击按钮触发事件</button>

即,触发事件

引用

wxml提供两种方式的引用。
import和include

import

import可以完成引用。即完成对模板的引用

<!-- item.wxml -->
<template name="item"><text>{{text}}</text>
</template><!-- 另外一个文件 -->
<import src="item.wxml"/>
<template is="item" data="{{text:"hello world"}}">

include

include将会完成包含
除了template和wxs以外都能进行包含

<include src="header.wxml"/>
<view>body</view>
<view src="footer.wxml"></view>

上方完成了一次模块化。即将header和footer进行合并,完成模块。

wxs模块

wxs,即模块
每一个文件和wxs标签都为一个单独的模块,独立。
每个模块都有一个独立的作用域。即在一个模块里定义的变量和函数。默认为私有,对其他模块不可见。

var foo = "hello world";
var bar =  function (d) { return d;
}module.exports = {foo: foo,bar: bar
}

即,上方文件完成了导出,可被wxs文件或者wxs标签引用

module

每个wxs模块有一个内置的module对象

<wxs src="./hello.wxs" module="tools"/>
<view>{{tools.msg}}</view>
<view>{{tools.bar(tools.foo)}}</view> 
var foo = "hello world"
var bar = function(d) {return d;
}module.exports = {foo: foo,bar: bar
};module.exports.msg = "some msg"

require函数

同理,可以进行引入
不在阐述
类似于node.js的包

wxs模块只能进行引入,使用include和import wxs模块的时候不能进行引入
template 标签中只能定义该标签内部的wxs模块

变量

变量依旧会有变量的提升

注释

依旧类似

运算符

依旧类似

语句

依旧类似

数据类型

依旧类似
arguments 依旧可以在function内使用
日期类型不过换了一个函数

getDate()

正则由原先的new变成了一个函数

getRegExp

数据类型的判断可以就、依旧使用typeof

一些基础的库

依旧类似

console.log

此函数依旧可用
Match依旧可用
json依旧可用
JSON.stringify 依旧可用
JSON.parse 依旧可用
迁移即可
统统都是es5的内容

WXSS

一种类似于css的微信内容
尺寸单位 由原先的em,px 给换成了rpx
以物理像素为单位

em 以当前字体大小为单位

@import

同样类似,使用import即可导入,和css类似

内联样式

同样类似,多出

element

after和before依旧可用

全局样式和局部样式

依旧可在app.wxss中使用
依旧类似

组件

组件为视图层的基本单元

对应于组件化

组件会自带微信的一些功能
组件包括开始标签和结束标签,属性用来修饰内容
view 视图容器
scroll-view 允许组件滚动
swiper 对应于滑块
icon 对应于封装好的图标
text 对应于封装好的文字
progress 对应于封装好的进度条
form 进行表单,包括数据的提交
navigator 跳转到新页面
video 播放视频 类似于h5的标签
canvas 支持进行画画

转载于:https://www.cnblogs.com/melovemingming/p/9551871.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

思科收购网络安全管理厂商Pari Networks

思科收购网络安全管理厂商Pari Networkshttp://netsecurity.51cto.com 2011-01-28 09:39 胡杨 译 网界网 我要评论(0)摘要&#xff1a;思科本星期宣布&#xff0c;它打算收购私营企业Pari Networks。这个企业是前思科工程师创建的&#xff0c;主要提供网络配置、变更和合规…

20年软件工程师的经验

软件工程师在做设计的时候&#xff0c;一定要有设计的思维&#xff0c;码农如果只是砌砖的&#xff0c;那么他的可替代性和技能能力并不高。前段时间看到一个设计师傅&#xff0c;在很狭小的空间内设计了非常非常不错的室内设计&#xff0c;利用了每一个可以利用的地方。如果我…

html超市代码,前端 CSS : 5# 纯 CSS 实现24小时超市

介绍原文链接感謝 comehope 大佬的 [前端每日实战]效果预览源代码地址代码解读1. html 结构命名规则使用了 BEM常规样式初始化* {margin: 0;padding: 0;box-sizing: border-box;}body {height: 100vh;overflow: hidden;}2. 街道背景街道背景分为两部分深蓝色的天空.street {hei…

送30块树莓派PICO 开发板!

大家好&#xff0c;今天是周日&#xff0c;给大家搞个小抽奖&#xff0c;送30块。嵌入式猛男必备&#xff0c;学嵌入式看『我要学嵌入式』&#xff0c;知识持久有力。点击关注&#xff0c;回复【1031】参与抽奖&#xff0c;免费送 10块 树莓派最新PICO开发板。学C语言看『写代码…

嘉立创又搞大事情了,与你我相关!

你们一定不知道嘉立创最近又悄咪咪的做了一件大事儿&#xff0c;硬创社硬件项目共享平台上线公测啦&#xff0c;这是一个帮助电子工程师实现技术变现的平台&#xff0c;平台刚刚上线公测&#xff0c;前期还在邀请电子工程师填充内容阶段&#xff0c;即日起平台每上传一个项目就…

c html联调,JS与native 交互简单应用

JS与native 交互简单应用一、objectiveC 语法简介二、简易项目浏览器搭建新建项目步骤&#xff1a;1>DraggedImage.png2>2222.png3>33333.png4>4444.png建立一个小的浏览器即webview关键代码如下&#xff1a;// context 上下文也可以在此处获取&#xff0c;开始加载…

写给我弟

我堂弟今年24岁&#xff0c;也是我最小的一个堂弟&#xff0c;我想给他说点事&#xff0c;想告诉他一些东西&#xff0c;但是也担心自己所说的&#xff0c;并不能让他认同和接受。我心里一定是有我弟的&#xff0c;也是装着我弟的&#xff0c;所以我弟的事情&#xff0c;我自己…

Chrome插件(扩展)

【干货】Chrome插件(扩展)开发全攻略 写在前面 我花了将近一个多月的时间断断续续写下这篇博文&#xff0c;并精心写下完整demo&#xff0c;写博客的辛苦大家懂的&#xff0c;所以转载务必保留出处。本文所有涉及到的大部分代码均在这个demo里面&#xff1a;https://github.com…

Apache OpenJPA 2.1.0 发布

OpenJPA 是 Apache 组织提供的开源项目&#xff0c;它实现了 EJB 3.0 中的 JPA 标准&#xff0c;为开发者提供功能强大、使用简单的持久化数据管理框架。OpenJPA 封装了和关系型数据库交互的操作&#xff0c;让开发者把注意力集中在编写业务逻辑上。OpenJPA 可以作为独立的持久…

手把手带你写一个中断输入设备驱动

今天群里有人问&#xff0c;要开始驱动开发的话从什么开始比较好。我说&#xff0c;应该开始去摸索触摸屏驱动&#xff0c;现在我想了下&#xff0c;触摸屏驱动可能会难了些&#xff0c;但是从一个GPIO开始&#xff0c;我觉得一定是一件很容易的事情。所以这篇文章就来了。大家…

驱动调试神器printk你掌握了吗?

[导读] 刚刚开始做Linux相关开发工作时&#xff0c;深感Linux内核代码庞大&#xff0c;要加些自己的驱动进内核代码树&#xff0c;常常深陷bug的泥沼难以自拔&#xff0c;今天来分享一下内核调试利器printk的使用心得。前面一段时间很忙&#xff0c;后期更文频率会渐渐回归正常…

腾讯云技术专家卢萌凯手把手教你Demo一个人脸识别程序!

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 本文来自腾讯云技术沙龙&#xff0c;本次沙龙主题为Serverless架构开发与SCF部署实践 卢萌凯&#xff1a;毕业于东南大学&#xff0c;曾就职于华为&#xff0c;熟悉云行业解决方案。目前负责腾讯云中间件产…

二十世纪最伟大的算法,你了解哪个?

导读&#xff1a;作者July总结了一篇关于计算方法的文章《 细数二十世纪最伟大的10大算法 》。一、1946 蒙特卡洛方法[1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known …

桌面计算机恢复出厂设置,windows7电脑怎么恢复出厂设置

我们使用电脑一段时间&#xff0c;由于各种问题&#xff0c;希望将电脑恢复出厂设置&#xff0c;那么windows7电脑怎么恢复出厂设置呢&#xff1f;下面跟着学习啦小编来一起了解下windows7电脑恢复出厂设置的方法吧。windows7电脑恢复出厂设置方法一按下开机键&#xff0c;启动…

关于Exchange管理控制台报“您的权限不足,无法此查看数据”的解决办法

今天朋友突然来电话&#xff0c;说自己的Exchange 2010 EMC突然报“you dont have sufficient permissions to view this data”&#xff08;您的权限不足&#xff0c;无法查看此数据&#xff09;&#xff0c;同时所有的cmdlet命令也不可以执行。询问我解决办法&#xff0c;出错…

内存为什么还有管理?

本文作者&#xff1a;度白嵌入式任何程序运行起来都需要分配内存空间存放该进程的资源信息的&#xff0c;C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同&#xff0c;不同的区域又有不同的特性。C语言学习者、尤其是在学习嵌入式的朋友&…

旧手机别扔,手把手教你DIY一台Linux服务器

作者&#xff1a;Hannah Lee编译&#xff1a;弯月 欧阳姝黎来源&#xff1a;CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;本文将向你展示如何使用 UrBackup 和 Linux Deploy在一台 Android 旧手机上搭建一台备份服务器。旧手机的污染问题众所周知&#xff0c;我有一台旧…

学计算机买电脑显卡1605ti够吗,GTX1650和GTX1050Ti哪个好?GTX1050ti和GTX1650性能差距对比评测...

GTX1650显卡在2019年4月22日进行发售&#xff0c;不少用户认为GTX1650是智商检测卡&#xff0c;真的是吗&#xff1f;从命名上来看&#xff0c;GTX1650应该是GTX1050的升级产品&#xff0c;不过根据英伟达的说法&#xff0c;GTX1650相比GTX1050提升幅度达到了70%&#xff0c;但…

Gamma的传说

Gamma校正对于图形和图像来说是个常提的概念&#xff0c;但对于gamma的缘由和使用方法&#xff0c;却存在着很多传说。本文将尽可能解析gamma校正来源&#xff0c;破解各种迷思。Gamma校正从何而来 有一种常见的说法&#xff0c;gamma来源于眼睛对光感受。我也曾经错误地采用了…

心急吃不了热豆腐

良好的焊接是保证电路稳定持久工作的前提。下面给出了常见到的焊接缺陷。看看你遇到过多少种&#xff1f;▲ 图1 焊接中的常见问题▲ 图2 锡珠▲ 图3 扰动的焊接&#xff1a;在焊接点冷却过程中焊锡移动&#xff0c;造成焊接表面起雾、结晶、粗糙▲ 图4 立碑▲ 图5 冷结&…