小程序 (一)

一、概念

  1、小程序的逻辑层与渲染层是分开的,逻辑层 js 运行在JSCore中,渲染层是 WXML 和 WXSS ,使用Webview进行渲染,小程序没有完整的浏览器对象。

  2、小程序的运行环境

          运行环境          逻辑层          渲染层

           ios           JavascriptCore       WKWebview

          Android           v8          chromium 定制内核

        小程序开发者工具        NWJS         chrom webview

  3、小程序代码构成

    .json 文件  -->   配置文件

    .wxml        -->   模板文件

    .wxss        -->   样式文件

    .js             -->   Js 脚本逻辑文件

    

 4、小程序通信:

    

5、WXML

    

  1、wxml与vue相似,通过 {{ }} 将数据绑定到页面中,text 是行内元素,view是块元素。

  2、列表渲染:列表渲染的属性,也需要写在{{}}中,如wx:for="{{arr}}",若写成wx:for="arr"会被当做字符串处理

<view>
  <view wx:for="{{arr}}" wx:key="{{index}}">{{item}}</view>
</view>

  3、条件渲染:wx:if   wx:elif  wx:eles

<view wx:if="{{judge}}">
  <text>judge为true时显示</text>
</view>
<view wx:else>
  <text >judge为false时显示</text>
</view>

  4、模板:小程序同样支持 template,给 template 标签设置name属性,表示该模板的名称。在使用时,通过is属性选择相应名称的模板进行调用,且可以通过data属性传入相应参数。

<!--wxml-->
<template name="staffName">
  <view>FirstName: {{firstName}}, LastName: {{lastName}}</view>
</template>

<template is="staffName" data="{{...staffA}}"></template>
<template is="staffName" data="{{...staffB}}"></template>
<template is="staffName" data="{{...staffC}}"></template>


// index.js
Page({
  data: {
    staffA: {firstName: 'Hulk', lastName: 'Hu'},
    staffB: {firstName: 'Shang', lastName: 'You'},
    staffC: {firstName: 'Gideon', lastName: 'Lin'}
  }
})

  5、事件:为标签绑定事件,可以用  bind+事件名  作为属性,方法名称不需要用 {{}} 绑定,与 vue 不同,绑定的方法不支持传参。小程序由于在移动端,绑定点击事件不能用 bindclick ,而是需要用  bindtap 。在方法中获取数据需要 this.data[name] , 修改数据需要  this.setData 方法。

<!--wxml-->
<button type="primary" bindtap="onTap">
  修改条件渲染
</button>


onTap() {
  this.setData({
    judge: !this.data.judge
  })
}
// 与data属性平级

  6、scroll-view : 用来创建滚动视图,但需要设置 scroll-y="{{true}}" 才可以启动纵轴方向的滚动,同时需要通过 wxss 设置高度,超过高度才会触发滚动。

<scroll-view scroll-y="{{true}}" style="height: 100rpx;">
  <view wx:for="{{arr}}" wx:key="{{index}}">{{item}}</view>
</scroll-view>

  7、icon : 用来创建一个图标,它可以通过 type 属性使用微信的内置图标类型,如:success, success_no_circle, info, warn, waiting, cancel, download, search, clear。 还有 size 、color 属性。所有图标都是矢量图。若需要为图标插入文本,使用 text 标签即可。

<icon type="success" size="23" color="green" />
<text >成功</text>

  8、navigator :  navigator类似于HTML中的a标签,可通过 url 属性设置跳转地址,仅支持当前小程序内的跳转。

<navigator url="/pages/login/login">跳转到login</navigator>

  9、radio 和 checkbox : radio 和 checkbox 都需要放在 radio-group 和 checkbox-group 标签中使用,前者用于实现单选功能,后者用于数据分组。

<form action="">
  <radio-group>
    <label wx:for="{{options}}" wx:for-item="item" wx:key="{{item.id}}">
      <radio value="{{item.value}}" /> {{item.name}}
    </label>
  </radio-group>
  <checkbox-group>
    <label wx:for="{{options}}" wx:for-item="item" wx:key="{{item.id}}">
      <checkbox value="{{item.value}}" /> {{item.name}}
    </label>
  </checkbox-group>
</form>

  10、picker : picker 可以创建一个选择器,默认的 mode 为普通选择器 selector ,它还支持多列选择器,时间选择器,日期选择器,省市区选择器。

picker的children可以是一个标签,点击children时会弹出选择器。

picker的range属性为必须,它可以绑定Array / Object Array,其值为选择器的选项,当其类型为Object Array时,需要用range-key属性指定选择器显示的内容。

picker的value属性为必须,绑定的是选中项目的index。

当选择器发生选择时,需要通过bindchange事件改变绑定的value值,bindchange的参数为event,其中event.detail = {value: value}。

<!--wxml-->
<form >
  <picker mode="selector" range="{{options}}" value="{{pickerSelected}}" bindchange="onPickerChange">
    <view >{{pickerSelected}}</view>
  </picker>
</form>


// js
onPickerChange(event) {
  this.setData({
    pickerSelected: event.detail.value
  })
}

6、WXSS

  1、wxss 与 css 不同 :

    (1)没有 body ,可以通过对 page 设置样式,来影响整个页面的样式;也可以在 page 的 .json 中设置backgroundColor属性,来设置 page 下拉时出现空白区域的颜色,当页面有下拉刷新、上拉加载功能时,需要设置 backgroundColor 属性。

page {
    background:#F8F8F8
}

  2、新增了尺寸单位 rpx , 在小程序里依旧可以使用 px 、em 等尺寸单位。rpx 可以根据屏幕的宽度进行自适应,它规定屏幕的宽为 750rpx , 1 rpx =  0.5 px = 1 物理像素

  3、样式引入 :可以直接导入第三方的 wxss 文件。

@import "common.wxss";
.middle-p {
  padding:15px;
}

  4、内联样式 :和 css 一样,wxss 支持 class 和 style 两种样式,但在用法上有区别:如果样式中有动态内容,将其写到 style 中,其他的都放到 class 文件中。如果 style 中样式写的过多,小程序在渲染视图的时候还要解析对应的样式布局,对性能有影响。

<view style="color:{{color}};" />

  5、选择器 :

   6、全局样式与局部样式:局部样式会覆盖app.wxss 中相同的选择器。

      

  

  

原文地址:https://www.cnblogs.com/zhou-xm/p/13044819.html