微信小程序继续入坑指南

微信小程序继续入坑指南

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…

继续努力奋斗,生活会更美好

回想起2010年&#xff0c;有点留恋&#xff0c;又有点让我伤感。 在北京这么长时间了&#xff0c;也该有段难忘的事啊&#xff01; 人们都说现时很残酷&#xff0c;才发现我的感觉是错的。现时让我很无奈。 现在不是以前。要做现在的自己。 做自己所想的&#xff0c;想自己所做…

送30块树莓派PICO 开发板!

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

会考计算机考试vb知识点,高中会考计算机vb知识点.doc

学 海 无 涯PAGEPAGE 1一、知识点1&#xff0e;对象、属性、类、事件和事件处理的概念(1)对象是客观存在的事物或概念。它有两个特点&#xff1a;状态和行为。(2)一个对象的状态是通过若干个属性(property)来描述的&#xff1b;行为是指对属性进行操作和处理的方法(method)。在…

[转]过度情绪化心智模式的10大特征——看看你有几个?

1. 或者完胜或者完败的思考方式&#xff1a;这样考虑问题的人只用黑和白两种颜色来划分一切。如果某件事不是很完美&#xff0c;那他就认为这件事是彻底的失败。2. 过度概括&#xff1a;这时一个人会使用“总是”、“从来也不能”等字眼&#xff0c;并将一个单独的事件看作是一…

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

你们一定不知道嘉立创最近又悄咪咪的做了一件大事儿&#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;开始加载…

基于Extjs的OPOA

基于ExtJs的opoa系统 OPOA是one page ,one application的简称&#xff0c;即单页系统&#xff0c;也就是说一个系统只有一个页面。就是要求所有其他的页面都以插件的形式在主页里显示&#xff0c;点击主页的一个菜单或链接按钮&#xff0c;调用一个模块的插件。插件在主页里以t…

写给我弟

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

Chrome插件(扩展)

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

计算机科学与技术 天涯,计算机科学与技术专业

计算机科学与技术专业业务培养目标&#xff1a;本专业培养具有良好的科学素养&#xff0c;系统地、较好地掌握计算机科学与技术包括计算机硬件、软件与应用的基本理论、基本知识和基本技能与方法&#xff0c;能在科研部门、教育单位、企业、事业、技术和行政管理部门等单位从事…

Apache OpenJPA 2.1.0 发布

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

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

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

配置sudo访问

具体操作步骤 1.首先我们建立一个账户&#xff0c;设置密码 [rootVM_0_13_centos home]# useradd 123 [rootVM_0_13_centos home]# passwd 123 Changing password for user better407. New password: BAD PASSWORD: it is WAY too short BAD PASSWORD: is too simple Retype n…

读取Xml文档的元素和属性

<?xml version"1.0" encoding"utf-8" ?><StuInfo> <student> <ID>1001</ID> <Name>张三</Name> <Sex>男</Sex> <Birthday age"23">1987-1-12</Birthday> &l…

计算机专业需要注意什么细节,计算机专业考生复试注意事项

计算机专业考生复试注意事项随着计算机相关技术的突飞猛进&#xff0c;对人才的职业发展也提出了更高的要求。近年来&#xff0c;计算机及相关专业一直是研究生报考的热门专业&#xff0c;复试中的竞争日益激烈。如何在复试中脱颖而出呢?导师通常看重学生的那些能力?下面就计…

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

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

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

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