微信小程序基础组件介绍

微信小程序_文档_06_组件_视图容器_基础内容_导航 基础组件框架为开发者提供了一系列基础组件,开发者可以通过组合这些基础组件进行快速开发。什么是组件:组件是视图层的基本组成单元。组件自带一些功能与微信风格的样式。一个组件通常包括开始标签和结束标签,属性用来修饰这个组件,内容在两个标签之内。<tagname property="value"> Content goes here ... </tagname> 注意:所有组件... 阅读详情

3-4章 第3章 form表单组件与小程序前后端通信

View它相当于是一个点击触发一个事件,但是它的事件应该是相对来说可能是比较是偏向于页面上的一些展示,或者说是页面上的一些导航的一些跳转。Button它是一个标签,

button是一个标签,一般去触发按钮的话大部分我们会去让我们的小程序页面和我们的后端进行一个交互,交互的时候它会有一个网络的延时。当有网络延时的时候我们就可以使用这个loading。

复制代码

<button>按钮</button>
<button size="mini">按钮1</button>

<button size="mini" type='default'>按钮2</button>
<button size="mini" type='primary'>按钮3</button>
<button size="mini" type='warn' plain='{{true}}'>按钮4</button>
<button size="mini" type='warn' disabled='{{true}}' loading='{{true}}'>按钮5</button>

复制代码


form-type要结合form表单一起去使用。


和View有关的。


checkbox是多选框。在Web开发的html页面里面肯定也是有用过checkbox。checkbox它也是可以配合label一起来使用的。


把所有的多选框全部放到多选框组checkbox-group内才可以。并且这个组会有一个change事件。这是我们以前所说的onchange事件。那么我们通过bindchange就可以绑定一个change事件。

这是单标签的展示方式。

复制代码

<checkbox-group>
    <checkbox value='v中国'/>中国
    <checkbox value='v美国' disabled='{{true}}'/>美国
    <checkbox value='v俄国' checked='{{true}}' color='red'/>俄国
</checkbox-group>

<checkbox-group>
    <view wx:for="{{array}}">
    <checkbox value='{{item.name}}' checked='{{item.checked}}' color='{{item.color}}' disabled='{{item.disabled}}'/>{{item.value}}
    </view>
</checkbox-group>

复制代码

复制代码

// pages/view/view.js
Page({
    data:{
        array:[
           {name:"v中国",value:"中国",checked:true,color:"red",
disabled:false},
           {name:"v美国", value: "美国", checked:false,color: "blue",disabled:false},
           {name: "v俄国", value: "俄国" , checked: true, color: "pink",
disabled:false}
        ]
    }
})

复制代码


复制代码

<checkbox-group>
    <checkbox value='v中国'/>中国
    <checkbox value='v美国' disabled='{{true}}'/>美国
    <checkbox value='v俄国' checked='{{true}}' color='red'/>俄国
</checkbox-group>

<checkbox-group>
    <view wx:for="{{array}}">
    <checkbox value='{{item.name}}' checked='{{item.checked}}' color='{{item.color}}' disabled='{{item.disabled}}'>{{item.value}}</checkbox>
    </view>
</checkbox-group>

复制代码

复制代码

// pages/view/view.js
Page({
    data:{
        array:[
           {name:"v中国",value:"中国",checked:true,color:"red",
disabled:false},
           {name:"v美国", value: "美国", checked:false,color: "blue",disabled:false},
           {name: "v俄国", value: "俄国" , checked: true, color: "pink",
disabled:false}
        ]
    }
})

复制代码

这是改为用双标签去展示。


还有另外一种方式。官方建议我们使用label和checkbox绑定使用。label它其实可以配合很多去进行使用。

因为View是竖排/纵排的排序。然后label是横排。

复制代码

<checkbox-group>
    <checkbox value='v中国'/>中国
    <checkbox value='v美国' disabled='{{true}}'/>美国
    <checkbox value='v俄国' checked='{{true}}' color='red'/>俄国
</checkbox-group>

<checkbox-group>
    <label wx:for="{{array}}">
    <checkbox id="{{item.id}}" value='{{item.name}}' checked='{{item.checked}}' color='{{item.color}}' disabled='{{item.disabled}}'/>{{item.value}}
    </label>
</checkbox-group>

<label for='1001'>测试点击</label>

复制代码

复制代码

// pages/view/view.js
Page({
    data:{
        array:[
           { id: "1001", name:"v中国",value:"中国",checked:true,color:"red",
disabled:false},
           { id: "1002", name:"v美国", value: "美国", checked:false,color: "blue",disabled:false},
           { id: "1003", name: "v俄国", value: "俄国" , checked: true, color: "pink",
disabled:false}
        ]
    }
})

复制代码


e是事件对象,并且它是一个change事件,并且它里面我们触发一个change的时候,它所有的值带过来是一个数组对象,


复制代码

// pages/view/view.js
Page({
    data:{
        array:[
           { id: "1001", name:"v中国",value:"中国",checked:true,color:"red",
disabled:false},
           { id: "1002", name:"v美国", value: "美国", checked:false,color: "blue",disabled:false},
           { id: "1003", name: "v俄国", value: "俄国" , checked: true, color: "pink",disabled:false}
        ]
    },

    changed: function(e) {
       debugger
    }
})

复制代码

复制代码

<checkbox-group bindchange="changed">
    <checkbox value='v中国'/>中国
    <checkbox value='v美国' disabled='{{true}}'/>美国
    <checkbox value='v俄国' checked='{{true}}' color='red'/>俄国
</checkbox-group>

<checkbox-group>
    <label wx:for="{{array}}">
    <checkbox id="{{item.id}}" value='{{item.name}}' checked='{{item.checked}}' color='{{item.color}}' disabled='{{item.disabled}}'>{{item.value}}</checkbox>
    </label>
</checkbox-group>

复制代码


复制代码

<form bindsubmit='formSubmit' bindreset='formReset'>
<checkbox-group name="aa" bindchange="changed">
    <checkbox value='v中国'/>中国
    <checkbox value='v美国' disabled='{{true}}'/>美国
    <checkbox value='v俄国' checked='{{true}}' color='red'/>俄国
</checkbox-group>

<checkbox-group name="bb">
    <label wx:for="{{array}}">
    <checkbox id="{{item.id}}" value='{{item.name}}' checked='{{item.checked}}' color='{{item.color}}' disabled='{{item.disabled}}'>{{item.value}}</checkbox>
    </label>
</checkbox-group>
    <button form-type='submit'>提交</button>
    <button form-type='reset'>重置</button>
</form>

复制代码

复制代码

// pages/view/view.js
Page({
    data:{
        array:[
           { id: "1001", name:"v中国",value:"中国",checked:true,color:"red",
disabled:false},
           { id: "1002", name:"v美国", value: "美国", checked:false,color: "blue",disabled:false},
           { id: "1003", name: "v俄国", value: "俄国" , checked: true, color: "pink",disabled:false}
        ]
    },

    changed: function(e) {
       
    },

    formSubmit: function(e) {
        debugger;
    },

    formReset: function () {
      console.log("data has been resetted...");
    }
})

复制代码

复制代码

{
  "pages":[
    "pages/form/myform/myform",
    "pages/form/checkbox/checkbox",
    "pages/form/buttons/buttons",
    "pages/basic/basic",
    "pages/movable/movable",
    "pages/swiper/swiper",
    "pages/scrollView/scrollView",
    "pages/view/view",
    "pages/index/index"

  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "WeChat",
    "navigationBarTextStyle":"black"
  }
}

复制代码


inputs.wxml

复制代码

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

<input value="学习小程序实战" maxlength='10' cursor-spacing='0'></input>
<input value="number" type='number'></input>
<input value="idcard" type='idcard'></input>
<input value="digit" type='digit'></input>

密码框: <input value="" password='{{true}}'></input>

placeholder: <input value="" placeholder='请输入你的用户名' placeholder-style='color:green;'></input>
placeholder: <input value="" placeholder='请输入你的用户名' placeholder-class='placeholder'></input>

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

复制代码

复制代码

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

<input value="学习小程序实战" maxlength='10' cursor-spacing='300'></input>
<input value="number" type='number'></input>
<input value="idcard" type='idcard'></input>
<input value="digit" type='digit'></input>

密码框: <input value="" password='{{true}}'></input>

placeholder: <input value="" placeholder='请输入你的用户名' placeholder-style='color:green;'></input>
placeholder: <input value="" placeholder='请输入你的用户名' placeholder-class='placeholder'></input>

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

复制代码

'


复制代码

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

<input value="学习小程序实战" maxlength='10' cursor-spacing='300'></input>
<input value="number" type='number' focus='{{true}}'></input>
<input value="idcard" type='idcard'></input>
<input value="digit" type='digit'></input>

密码框: <input value="" password='{{true}}'></input>

placeholder: <input value="" placeholder='请输入你的用户名' placeholder-style='color:green;'></input>
placeholder: <input value="" placeholder='请输入你的用户名' placeholder-class='placeholder'></input>

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

复制代码


复制代码

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

<input value="学习小程序实战" maxlength='10' cursor-spacing='300' confirm-type='next'></input>
<input value="number" type='number' focus='{{true}}'></input>
<input value="idcard" type='idcard'></input>
<input value="digit" type='digit'></input>

密码框: <input value="" password='{{true}}'></input>

placeholder: <input value="" placeholder='请输入你的用户名' placeholder-style='color:green;'></input>
placeholder: <input value="" placeholder='请输入你的用户名' placeholder-class='placeholder'></input>

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

复制代码


复制代码

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

<input value="学习小程序实战" maxlength='10' cursor-spacing='300' confirm-type='next' confirm-hold='{{true}}'></input>
<input value="number" type='number' focus='{{true}}' cursor='3'></input>
<input value="idcard" type='idcard'></input>
<input value="digit" type='digit'></input>

密码框: <input value="" password='{{true}}'></input>

placeholder: <input value="" placeholder='请输入你的用户名' placeholder-style='color:green;'></input>
placeholder: <input value="" placeholder='请输入你的用户名' placeholder-class='placeholder'></input>

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

复制代码


复制代码

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

<input value="学习小程序实战" maxlength='10' cursor-spacing='300' confirm-type='next' confirm-hold='{{true}}'></input>
<input value="number" type='number' focus="{{true}}" cursor="3" selection-start='2' selection-end='4'></input>
<input value="idcard" type='idcard'></input>
<input value="digit" type='digit'></input>

密码框: <input value="" password='{{true}}'></input>

placeholder: <input value="" placeholder='请输入你的用户名' placeholder-style='color:green;'></input>
placeholder: <input value="" placeholder='请输入你的用户名' placeholder-class='placeholder'></input>

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

复制代码


复制代码

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

<input value="学习小程序实战" maxlength='10' cursor-spacing='300' confirm-type='next' confirm-hold='{{true}}'></input>
<input value="number" type='number' focus="{{true}}" cursor="3" selection-start='2' selection-end='4' 
adjust-position="{{true}}"></input>
<input value="idcard" type='idcard'></input>
<input value="digit" type='digit'></input>

密码框: <input value="" password='{{true}}'></input>

placeholder: <input value="" placeholder='请输入你的用户名' placeholder-style='color:green;'></input>
placeholder: <input value="" placeholder='请输入你的用户名' placeholder-class='placeholder'></input>

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

复制代码


bindinputEventHandle 键盘输入时触发,event.detail = {value, cursor, keyCode},keyCode 为键值,2.1.0 起支持,处理函数可以直接 return 一个字符串,将替换输入框的内容。 
bindfocusEventHandle 输入框聚焦时触发,event.detail = { value, height },height 为键盘高度,在基础库 1.9.90 起支持 
bindblurEventHandle 输入框失去焦点时触发,event.detail = {value: value} 
bindconfirmEventHandle 点击完成按钮时触发,event.detail = {value: value}

复制代码

Page({

   inputEvent:function() {
       console.log("inputEvent");
       return "imooc";
   },

   blurEvent: function() {
     console.log("blurEvent");
   },

   focusEvent: function () {
     console.log("focusEvent");
   },
   confirmEvent: function () {
     console.log("confirmEvent");

   }


}



)

复制代码

复制代码

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

<input value="学习小程序实战" maxlength='10' cursor-spacing='300' confirm-type='next' confirm-hold='{{true}}' bindinput='inputEvent' bindfocus='focusEvent' bindblur='blurEvent' bindconfirm='confirmEvent'></input>
<input value="number" type='number' focus="{{true}}" cursor="3" selection-start='2' selection-end='4' 
adjust-position="{{true}}"></input>
<input value="idcard" type='idcard'></input>
<input value="digit" type='digit'></input>

密码框: <input value="" password='{{true}}'></input>

placeholder: <input value="" placeholder='请输入你的用户名' placeholder-style='color:green;'></input>
placeholder: <input value="" placeholder='请输入你的用户名' placeholder-class='placeholder'></input>

<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>
<view>123456</view>

复制代码


复制代码

// pages/view/view.js
Page({
  data:{
    array:[1,2,3,4,5,6,7,8,9,0],
    arrayObj:[
         { id: 1001, name: "jack" },
         { id: 1002, name: "lilei" },
         { id: 1003, name: "hanmeimei" },
         { id: 1004, name: "lucy" },
         { id: 1005, name: "poly" },
    ]
  }
})

复制代码

复制代码

<picker mode="selector" range='{{array}}'>
    请选择我

</picker>

<picker mode="selector" range='{{arrayObj}}'>
    请选择我

</picker>

复制代码


复制代码

// pages/view/view.js
Page({
  data:{
    array:[1,2,3,4,5,6,7,8,9,0],
    arrayObj:[
         { id: 1001, name: "jack" },
         { id: 1002, name: "lilei" },
         { id: 1003, name: "hanmeimei" },
         { id: 1004, name: "lucy" },
         { id: 1005, name: "poly" },
    ]
  }
})

复制代码

复制代码

<picker mode="selector" range='{{array}}'>
    请选择我

</picker>

<picker mode="selector" range='{{arrayObj}}' range-key='id'>
    请选择我

</picker>

复制代码


复制代码

<picker mode="selector" range='{{array}}'>
    请选择我

</picker>

<picker mode="selector" range='{{arrayObj}}' range-key='name'>
    请选择我

</picker>

复制代码

复制代码

// pages/view/view.js
Page({
  data:{
    array:[1,2,3,4,5,6,7,8,9,0],
    arrayObj:[
         { id: 1001, name: "jack" },
         { id: 1002, name: "lilei" },
         { id: 1003, name: "hanmeimei" },
         { id: 1004, name: "lucy" },
         { id: 1005, name: "poly" },
    ]
  }
})

复制代码


复制代码

<picker mode="selector" range='{{array}}'>
    请选择我

</picker>

<picker mode="selector" range='{{arrayObj}}' range-key='name' bindchange='changeme' bindcancel='cancelme' >
    <view>请选择我</view>

</picker>

复制代码

复制代码

// pages/view/view.js
Page({
  data:{
    array:[1,2,3,4,5,6,7,8,9,0],
    arrayObj:[
         { id: 1001, name: "jack" },
         { id: 1002, name: "lilei" },
         { id: 1003, name: "hanmeimei" },
         { id: 1004, name: "lucy" },
         { id: 1005, name: "poly" },
    ]
  },

  changeme: function (e) {
      var index = e.detail.value;
      console.log("index下标值为: " + index);
  },

  cancelme: function (e) {
     console.log("触发取消事件....");

  }
})

复制代码


复制代码

// pages/view/view.js
Page({
  data:{
    array:[1,2,3,4,5,6,7,8,9,0],
    arrayObj:[
         { id: 1001, name: "jack" },
         { id: 1002, name: "lilei" },
         { id: 1003, name: "hanmeimei" },
         { id: 1004, name: "lucy" },
         { id: 1005, name: "poly" },
    ],
    showme: "请选择一个人名"
  },

  changeme: function (e) {
      var index = e.detail.value;
      console.log("index下标值为: " + index);
      var id = this.data.arrayObj[index].id;
      var name = this.data.arrayObj[index].name;
      this.setData({
         
         showme :  id + name


      });
  },

  cancelme: function (e) {
     console.log("触发取消事件....");

  }
})

复制代码

复制代码

<picker mode="selector" range='{{array}}'>
    请选择我

</picker>

<picker mode="selector" range='{{arrayObj}}' range-key='name' bindchange='changeme' bindcancel='cancelme' >
    <view>{{showme}}</view>

</picker>

复制代码


复制代码

<view>单列选择器</view>
<picker mode="selector" range='{{array}}'>
    请选择我

</picker>

<picker mode="selector" range='{{arrayObj}}' range-key='name' bindchange='changeme' bindcancel='cancelme' bindcolumnchange="columnchange">
    <view>{{showme}}</view>

</picker>

<view style='margin-top:100rpx;'>多列选择器</view>
<picker mode="multiSelector" range='{{arrayMulti}}'>
    请选择我

</picker>

<picker mode="multiSelector" range='{{arrayObjMulti}}' range-key='id' bindchange='changemeMulti' bindcancel='' bindcolumnchange="columnchange">
    <view>{{showme}}</view>

</picker>

复制代码

复制代码

// pages/view/view.js
Page({
  data:{
    array:[1,2,3,4,5,6,7,8,9,0],
    arrayObj:[
         { id: 1001, name: "jack" },
         { id: 1002, name: "lilei" },
         { id: 1003, name: "hanmeimei" },
         { id: 1004, name: "lucy" },
         { id: 1005, name: "poly" },
    ],
    showme: "请选择一个人名",
    arrayMulti: [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    ],
    arrayObjMulti: [
      [
      { id: 1001, name: "jack" },
      { id: 1002, name: "lilei" },
      { id: 1003, name: "hanmeimei" },
      { id: 1004, name: "lucy" },
      { id: 1005, name: "poly" },
    ],
    [
    { id: 1001, name: "jack" },
    { id: 1002, name: "lilei" },
    { id: 1003, name: "hanmeimei" },
    { id: 1004, name: "lucy" },
    { id: 1005, name: "poly" },
    ]
    ]
  },

  changeme: function (e) {
      var index = e.detail.value;
      console.log("index下标值为: " + index);
      var id = this.data.arrayObj[index].id;
      var name = this.data.arrayObj[index].name;
      this.setData({
         
         showme :  id + name


      });
  },

  cancelme: function (e) {
     console.log("触发取消事件....");

  },

  columnchange: function(e) {
    console.log("触发取消事件....");
  },

  columnchange:function(e) {
    console.log(e.detail);
  },

  changemeMulti: function(e) {
      var indexs = e.detail.value;
      var arrayObjMulti = this.data.arrayObjMulti;

      for (var i=0; i < indexs.length; i++) {
         var indexTmp = indexs[i];
         var id = arrayObjMulti[i][indexTmp].id;
         var name = arrayObjMulti[i][indexTmp].name;
         console.log(id + " " + name);
      }
  }
})

复制代码

复制代码

// pages/view/view.js
Page({
  data:{
    array:[1,2,3,4,5,6,7,8,9,0],
    arrayObj:[
         { id: 1001, name: "jack" },
         { id: 1002, name: "lilei" },
         { id: 1003, name: "hanmeimei" },
         { id: 1004, name: "lucy" },
         { id: 1005, name: "poly" },
    ],
    showme: "请选择一个人名",
    arrayMulti: [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    ],
    arrayObjMulti: [
      [
      { id: 1001, name: "jack" },
      { id: 1002, name: "lilei" },
      { id: 1003, name: "hanmeimei" },
      { id: 1004, name: "lucy" },
      { id: 1005, name: "poly" },
    ],
    [
    { id: 1001, name: "jack" },
    { id: 1002, name: "lilei" },
    { id: 1003, name: "hanmeimei" },
    { id: 1004, name: "lucy" },
    { id: 1005, name: "poly" },
    ]
    ]
  },

  changeme: function (e) {
      var index = e.detail.value;
      console.log("index下标值为: " + index);
      var id = this.data.arrayObj[index].id;
      var name = this.data.arrayObj[index].name;
      this.setData({
         
         showme :  id + name


      });
  },

  cancelme: function (e) {
     console.log("触发取消事件....");

  },

  columnchange: function(e) {
    console.log("触发columnchange事件...." + e);
  },

  columnchange:function(e) {
    console.log(e.detail);
  },

  changemeMulti: function(e) {
      var indexs = e.detail.value;
      var arrayObjMulti = this.data.arrayObjMulti;

      for (var i=0; i < indexs.length; i++) {
         var indexTmp = indexs[i];
         var id = arrayObjMulti[i][indexTmp].id;
         var name = arrayObjMulti[i][indexTmp].name;
         console.log(id + " " + name);
      }
  }
})

复制代码


复制代码

<view>单列选择器</view>
<picker mode="selector" range='{{array}}'>
    请选择我

</picker>

<picker mode="selector" range='{{arrayObj}}' range-key='name' bindchange='changeme' bindcancel='cancelme' bindcolumnchange="columnchange">
    <view>{{showme}}</view>

</picker>

<view style='margin-top:100rpx;'>多列选择器</view>
<picker mode="multiSelector" range='{{arrayMulti}}'>
    请选择我

</picker>

<picker mode="multiSelector" range='{{arrayObjMulti}}' range-key='id' bindchange='changemeMulti' bindcancel='' bindcolumnchange="columnchange">
    <view>{{showme}}</view>

</picker>

<view style='margin-top:100rpx;'>时间选择器</view>
<picker mode="time" start="08:08" end="22:30" bindchange='changeTime'>
    <view>{{timeLable}}</view>

</picker>

<view style='margin-top:100rpx;'>日期选择器</view>
<picker mode="date" start="2018-03-01" end="2018-06-25" bindchange='changeDate' fields="month">
    <view>{{dateLable}}</view>

</picker>

<view style='margin-top:100rpx;'>城市选择器</view>
<picker mode="region" bindchange='changeCity'>
    <view>{{cityLable}}</view>

</picker>

复制代码


复制代码

// pages/view/view.js
Page({
  data:{
    year:[1990,1995,2000,2005,2010,2015,2020],
    month:[1,2,3,4,5,6,7,8,9,10,11,12],
    day:[1,5,10,15,20,25,30]
  }
})

复制代码

复制代码

<picker-view style='width:100%;height:250px;'>
     <picker-view-column>
        <view wx:for="{{year}}">{{item}}</view>
     
     </picker-view-column>

     <picker-view-column>
        <view wx:for="{{month}}">{{item}}</view>   
     </picker-view-column>
     
     <picker-view-column>
        <view wx:for="{{day}}">{{item}}</view>   
     </picker-view-column>

    
</picker-view>

复制代码

复制代码

{
  "pages":[
    "pages/form/pickerview/pickerview",
    "pages/form/pickers/pickers",
    "pages/inputs/inputs",
    "pages/form/myform/myform",
    "pages/form/checkbox/checkbox",
    "pages/form/buttons/buttons",
    "pages/basic/basic",
    "pages/movable/movable",
    "pages/swiper/swiper",
    "pages/scrollView/scrollView",
    "pages/view/view",
    "pages/index/index"

  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "WeChat",
    "navigationBarTextStyle":"black"
  }
}

复制代码


bindchangeEventHandle当滚动选择,value 改变时触发 change 事件,event.detail = {value: value};value为数组,表示 picker-view 内的 picker-view-column 当前选择的是第几项(下标从 0 开始)

复制代码

// pages/view/view.js
Page({

  data: {
    year:[1990,1995,2000,2005,2010,2015,2020],
    month:[1,2,3,4,5,6,7,8,9,10,11,12],
    day:[1,5,10,15,20,25,30],
    myvalue:"请选择日期"
  },

  changeme: function(e) {
    var indexs = e.detail.value;

    var year = this.data.year[indexs[0]];
    var month = this.data.month[indexs[1]];
    var day = this.data.day[indexs[2]];

    this.setData({
       myvalue: year + "年" + month + "月" + day + "日" 

    });
  }

})

复制代码

复制代码

<picker-view style='width:100%;height:250px;' bindchange="changeme">
     <picker-view-column>
        <view wx:for="{{year}}">{{item}}</view>
     
     </picker-view-column>

     <picker-view-column>
        <view wx:for="{{month}}">{{item}}</view>   
     </picker-view-column>
     
     <picker-view-column>
        <view wx:for="{{day}}">{{item}}</view>   
     </picker-view-column>

    
</picker-view>

<view>{{myvalue}}</view>

复制代码


复制代码

{
  "pages":[
    "pages/form/radios/radios",
    "pages/form/pickerview/pickerview",
    "pages/form/pickers/pickers",
    "pages/inputs/inputs",
    "pages/form/myform/myform",
    "pages/form/checkbox/checkbox",
    "pages/form/buttons/buttons",
    "pages/basic/basic",
    "pages/movable/movable",
    "pages/swiper/swiper",
    "pages/scrollView/scrollView",
    "pages/view/view",
    "pages/index/index"

  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "WeChat",
    "navigationBarTextStyle":"black"
  }
}

复制代码

复制代码

<radio-group>


   <radio checked='{{true}}'>中国</radio>
   <radio checked='{{true}}'>美国</radio>
   <radio checked='{{true}}'>俄国</radio>

</radio-group>

复制代码

复制代码

<radio-group>


   <radio checked='{{true}}'>中国</radio>
   <radio checked='{{true}}' disabled='{{true}}'>美国</radio>
   <radio checked='{{true}}' color='red'>俄国</radio>

</radio-group>

复制代码


复制代码

// pages/view/view.js
Page({


    data: {
      array: [
        {
          id: "1001", name: "v中国", value: "中国", checked: true, color: "red",
          disabled: false
        },
        { id: "1002", name: "v美国", value: "美国", checked: false, color: "blue", disabled: false },
        {
          id: "1003", name: "v俄国", value: "俄国", checked: true, color: "pink",
          disabled: false
        }
      ]
    }
  

})

复制代码

<radio-group>

<block wx:for="{{array}}">
   <radio checked='{{true}}' value='{{item.name}}'>{{item.value}}</radio>
</block>
</radio-group>


复制代码

<radio-group bindchange="changeme">

<block wx:for="{{array}}">
   <radio checked='{{true}}' value='{{item.name}}'>{{item.value}}</radio>
</block>
</radio-group>

<view>{{myvalue}}</view>

复制代码

复制代码

// pages/view/view.js
Page({


    data: {
      array: [
        {
          id: "1001", name: "v中国", value: "中国", checked: true, color: "red",
          disabled: false
        },
        { id: "1002", name: "v美国", value: "美国", checked: false, color: "blue", disabled: false },
        {
          id: "1003", name: "v俄国", value: "俄国", checked: true, color: "pink",
          disabled: false
        }
      ],
      myvalue:"请选择一个radio"
    },
    changeme:function(e){
        var value = e.detail.value;
        this.setData({
           myvalue : value

        });
    }
  

})

复制代码


<slider min="10" max="90" show-value="{{true}}" activeColor="red" backgroundColor="blue" block-size="20" block-color="green"></slider>

<view style='background-color:green;width:100%;height:500rpx;'></view>

bindchangeEventHandle 完成一次拖动后触发的事件,event.detail = {value: value} 
bindchangingEventHandle 拖动过程中触发的事件,event.detail = {value: value}

复制代码

// pages/view/view.js
Page({


    data: {
      myheight: "500rpx",
      staticHeight: 500  
    },

    iamchanging:function(e) {
         var val = e.detail.value;
         console.log(val);
         var newHeight = this.data.staticHeight * (val/100);
         this.setData({
            myheight: newHeight + "rpx"

         })
    }

})

复制代码

复制代码

<slider min="10" max="90" show-value="{{true}}" activeColor="red" backgroundColor="blue" block-size="20" block-color="green" bindchanging='iamchanging'></slider>

<view style='background-color:green;width:100%;height:{{myheight}};'></view>                                          
                  

 

                                                                                   

复制代码


<slider min="10" max="90" show-value="{{true}}" activeColor="red" backgroundColor="blue" block-size="20" block-color="green" bindchanging='' bindchange="changeme"></slider>

<view style='background-color:green;width:100%;height:{{myheight}};'></view>

复制代码

// pages/view/view.js
Page({


    data: {
      myheight: "500rpx",
      staticHeight: 500  
    },

    iamchanging:function(e) {
         var val = e.detail.value;
         console.log(val);
         var newHeight = this.data.staticHeight * (val/100);
         this.setData({
            myheight: newHeight + "rpx"

         })
    },
    changeme: function (e) {
      var val = e.detail.value;
      console.log(val);
      var newHeight = this.data.staticHeight * (val / 100);
      this.setData({
        myheight: newHeight + "rpx"

      })
    }

})

复制代码

bindchanging和bindchange事件不能同时存在,否则会冲突。


switch是变种的checkbox。

<switch checked="{{true}}" type="checkbox">这是一个开关选择器</switch>

<switch checked="{{true}}" color='red' bindchange="changeme">开关</switch>

<view style='background-color:{{color}};width:100%;height:700rpx;'></view>

复制代码

Page({
    data: {
        color: "white"
    },

    changeme: function(e){
        var flag = e.detail.value;
        console.log(flag);
        if (flag) {
           // 开灯
           this.setData({
               color: "white"

           });
        } else {
           // 关灯
           this.setData({
               color: "black"

           });
        }
    }


})

复制代码


textarea是一个多行文本框的输入,和之前的input差不多。textarea的属性有几个和input是不同的。

其实有一个是

show-confirm-barBooleantrue是否显示键盘上方带有”完成“按钮那一栏

 

bindlinechangeEventHandle 输入框行数变化时调用,event.detail = {height: 0, heightRpx: 0, lineCount: 0}

 

bindinputEventHandle 当键盘输入时,触发 input 事件,event.detail = {value, cursor}, bindinput 处理函数的返回值并不会反映到 textarea 上

bindinput在讲input组件的时候也有。textarea是不支持通过renturn把里面的一个字符串反映到我们的一个文本框里面去。处理函数是不会把返回值反映到我们的textarea上去。textarea的用法和input是差不多的。


布置一个作业

复制代码

<form bindsubmit='submitme' class='fontSize'>

   <input name="username" placeholder='请输入用户名'></input>
   <input name="password" password='{{true}}' placeholder='请输入密码'
></input>

   <checkbox-group name="skill" style='margin-top:25rpx;'>请选择技能
        <view wx:for="{{skills}}">
            <checkbox id='{{item.id}}' value='{{item.name}}'>{{item.value}}</checkbox>
        
        </view>
   
   </checkbox-group>

   <picker name="birthday" mode="date" start="2018-03-01" end="2018-06-25" bindchange='changeDate' style='margin-top:25rpx;'>
        <view>{{dateLable}}</view>
   </picker>

   <picker name="city" mode="region" bindchange="changeCity" style='margin-top:25rpx;'>
        <view>{{cityLable}}</view>
   </picker>

<radio-group name="sex" bindchange="changeme" style='margin-top:25rpx;'>
      <radio value='男' checked='{{true}}'>男</radio>
      <radio value='女' style='margin-left:25rpx;'>女</radio>
</radio-group>

</form>

复制代码


wx.navigator和wx.redirector,wx.是微信的API,我们可以通过API在JS里面去进行触发。这个导航标签在html里面可以类似于a标签,navigate和redirect属性可以类似于浏览器里面的一些相关的事件,比如window.href和window.location其实都是一个类似的道理。

<view>这是page1</view>

<navigator open-type='redirect' url='../page2/page2'>跳转到第2页</navigator>
<navigator url='../page3/page3'>跳转到第3页</navigator>
<view>这是page2</view>

<navigator url='../page3/page3'>跳转到第3页</navigator>

<navigator open-type='navigateBack'>返回</navigator>
<view>这是page3</view>

<navigator open-type='navigateBack' delta="2">返回</navigator>

<view>这是page1</view>


<!-- open-type='redirect' -->
<navigator  url='../page2/page2'>跳转到第2页</navigator>
<navigator url='../page3/page3'>跳转到第3页</navigator>
<view>这是page2</view>

<navigator url='../page3/page3'>跳转到第3页</navigator>

<navigator open-type='navigateBack'>返回</navigator>
<view>这是page3</view>

<navigator open-type='navigateBack' delta="2">返回</navigator>

页面之间是可以进行参数的传递的。

<view>这是page1</view>


<!-- open-type='redirect' -->
<navigator  url='../page2/page2?id=1001&name=慕课网'>跳转到第2页</navigator>
<navigator url='../page3/page3'>跳转到第3页</navigator>

复制代码

// pages/nav/page2/page2.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
  
  },
  onLoad:function(parmas) {
      console.log(parmas);
  }

})

复制代码


复制代码

{
  "pages":[
    "pages/images/images",
    "pages/nav/page1/page1",
    "pages/nav/page2/page2",
    "pages/nav/page3/page3",
    "pages/form/formtest/formtest",
    "pages/form/switch/switch",
    "pages/form/slider/slider",
    "pages/form/radios/radios",
    "pages/form/pickerview/pickerview",
    "pages/form/pickers/pickers",
    "pages/inputs/inputs",
    "pages/form/myform/myform",
    "pages/form/checkbox/checkbox",
    "pages/form/buttons/buttons",
    "pages/basic/basic",
    "pages/movable/movable",
    "pages/swiper/swiper",
    "pages/scrollView/scrollView",
    "pages/view/view",
    "pages/index/index"

  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "WeChat",
    "navigationBarTextStyle":"black"
  }
}

复制代码

<!--
<image src="https://mp.weixin.qq.com/debug/wxadoc/dev/image/cat/0.jpg?t=2018712"></image>
-->
<block wx:for="{{array}}">
<image src="{{src}}" mode='{{item.mode}}' style='width:200px;height:200px;'></image>
</block>

复制代码

// pages/nav/page1/page1.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    array: [{
      mode: 'scaleToFill',
      text: 'scaleToFill:不保持纵横比缩放图片,使图片完全适应'
    }, {
      mode: 'aspectFit',
      text: 'aspectFit:保持纵横比缩放图片,使图片的长边能完全显示出来'
    }, {
      mode: 'aspectFill',
      text: 'aspectFill:保持纵横比缩放图片,只保证图片的短边能完全显示出来'
    }, {
      mode: 'top',
      text: 'top:不缩放图片,只显示图片的顶部区域'
    }, {
      mode: 'bottom',
      text: 'bottom:不缩放图片,只显示图片的底部区域'
    }, {
      mode: 'center',
      text: 'center:不缩放图片,只显示图片的中间区域'
    }, {
      mode: 'left',
      text: 'left:不缩放图片,只显示图片的左边区域'
    }, {
      mode: 'right',
      text: 'right:不缩放图片,只显示图片的右边边区域'
    }, {
      mode: 'top left',
      text: 'top left:不缩放图片,只显示图片的左上边区域'
    }, {
      mode: 'top right',
      text: 'top right:不缩放图片,只显示图片的右上边区域'
    }, {
      mode: 'bottom left',
      text: 'bottom left:不缩放图片,只显示图片的左下边区域'
    }, {
      mode: 'bottom right',
      text: 'bottom right:不缩放图片,只显示图片的右下边区域'
    }],
      src: "F de jong.gif"
  }


})

复制代码


lazy-loadBooleanfalse图片懒加载。只针对page与scroll-view下的image有效
bindloadHandleEvent 当图片载入完毕时,发布到 AppService 的事件名,事件对象event.detail = {height:'图片高度px', width:'图片宽度px'}

复制代码

// pages/nav/page1/page1.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    array: [{
      mode: 'scaleToFill',
      text: 'scaleToFill:不保持纵横比缩放图片,使图片完全适应'
    }, {
      mode: 'aspectFit',
      text: 'aspectFit:保持纵横比缩放图片,使图片的长边能完全显示出来'
    }, {
      mode: 'aspectFill',
      text: 'aspectFill:保持纵横比缩放图片,只保证图片的短边能完全显示出来'
    }, {
      mode: 'top',
      text: 'top:不缩放图片,只显示图片的顶部区域'
    }, {
      mode: 'bottom',
      text: 'bottom:不缩放图片,只显示图片的底部区域'
    }, {
      mode: 'center',
      text: 'center:不缩放图片,只显示图片的中间区域'
    }, {
      mode: 'left',
      text: 'left:不缩放图片,只显示图片的左边区域'
    }, {
      mode: 'right',
      text: 'right:不缩放图片,只显示图片的右边边区域'
    }, {
      mode: 'top left',
      text: 'top left:不缩放图片,只显示图片的左上边区域'
    }, {
      mode: 'top right',
      text: 'top right:不缩放图片,只显示图片的右上边区域'
    }, {
      mode: 'bottom left',
      text: 'bottom left:不缩放图片,只显示图片的左下边区域'
    }, {
      mode: 'bottom right',
      text: 'bottom right:不缩放图片,只显示图片的右下边区域'
    }],
      src: "F de jong.gif"
  },
  
  load:function(e) {
     console.log(e.detail);
  }


})

复制代码

<!--
<image src="https://mp.weixin.qq.com/debug/wxadoc/dev/image/cat/0.jpg?t=2018712"></image>
-->
<block wx:for="{{array}}">
<image src="{{src}}" mode='{{item.mode}}' style='width:200px;height:200px;' lazy-load='{{false}}' bindload="load"></image>
</block>

<!--
<image src="https://mp.weixin.qq.com/debug/wxadoc/dev/image/cat/0.jpg?t=2018712"></image>
-->
<block wx:for="{{array}}">
<image src="{{src}}" mode='{{item.mode}}' style='width:200px;height:200px;' lazy-load='{{true}}' bindload="load"></image>
</block>

复制代码

// pages/nav/page1/page1.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    array: [{
      mode: 'scaleToFill',
      text: 'scaleToFill:不保持纵横比缩放图片,使图片完全适应'
    }, {
      mode: 'aspectFit',
      text: 'aspectFit:保持纵横比缩放图片,使图片的长边能完全显示出来'
    }, {
      mode: 'aspectFill',
      text: 'aspectFill:保持纵横比缩放图片,只保证图片的短边能完全显示出来'
    }, {
      mode: 'top',
      text: 'top:不缩放图片,只显示图片的顶部区域'
    }, {
      mode: 'bottom',
      text: 'bottom:不缩放图片,只显示图片的底部区域'
    }, {
      mode: 'center',
      text: 'center:不缩放图片,只显示图片的中间区域'
    }, {
      mode: 'left',
      text: 'left:不缩放图片,只显示图片的左边区域'
    }, {
      mode: 'right',
      text: 'right:不缩放图片,只显示图片的右边边区域'
    }, {
      mode: 'top left',
      text: 'top left:不缩放图片,只显示图片的左上边区域'
    }, {
      mode: 'top right',
      text: 'top right:不缩放图片,只显示图片的右上边区域'
    }, {
      mode: 'bottom left',
      text: 'bottom left:不缩放图片,只显示图片的左下边区域'
    }, {
      mode: 'bottom right',
      text: 'bottom right:不缩放图片,只显示图片的右下边区域'
    }],
      src: "F de jong.gif"
  },
  
  load:function(e) {
     console.log(e.detail);
  }


})

复制代码


<!--
<image src="https://mp.weixin.qq.com/debug/wxadoc/dev/image/cat/0.jpg?t=2018712"></image>
-->
<block wx:for="{{array}}">
<image src="{{src}}" mode='{{item.mode}}' style='width:150px;height:150px;' lazy-load='{{true}}' bindload="load"></image>
</block>

复制代码

// pages/nav/page1/page1.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    array: [{
      mode: 'scaleToFill',
      text: 'scaleToFill:不保持纵横比缩放图片,使图片完全适应'
    }, {
      mode: 'aspectFit',
      text: 'aspectFit:保持纵横比缩放图片,使图片的长边能完全显示出来'
    }, {
      mode: 'aspectFill',
      text: 'aspectFill:保持纵横比缩放图片,只保证图片的短边能完全显示出来'
    }, {
      mode: 'top',
      text: 'top:不缩放图片,只显示图片的顶部区域'
    }, {
      mode: 'bottom',
      text: 'bottom:不缩放图片,只显示图片的底部区域'
    }, {
      mode: 'center',
      text: 'center:不缩放图片,只显示图片的中间区域'
    }, {
      mode: 'left',
      text: 'left:不缩放图片,只显示图片的左边区域'
    }, {
      mode: 'right',
      text: 'right:不缩放图片,只显示图片的右边边区域'
    }, {
      mode: 'top left',
      text: 'top left:不缩放图片,只显示图片的左上边区域'
    }, {
      mode: 'top right',
      text: 'top right:不缩放图片,只显示图片的右上边区域'
    }, {
      mode: 'bottom left',
      text: 'bottom left:不缩放图片,只显示图片的左下边区域'
    }, {
      mode: 'bottom right',
      text: 'bottom right:不缩放图片,只显示图片的右下边区域'
    }],
      src: "F de jong.gif"
  },
  
  load:function(e) {
     console.log(e.detail);
  }


})

复制代码


小程序不像是一个Web应用,Web应用我们发布之后可以直接在浏览器里面去打上一个本地的地址外加一个端口就可以访问了。小程序是不可以的,它只可以去访问一些在线的并且是通过域名绑定过的后台程序。通过内网穿透就可以把本地的IP和端口号暴露到公网,并且可以映射某一个域名。


用户可以通过防火墙直接穿透,穿透到我们的云端,这样子就可以相互进行访问。作用是内网穿透。

复制代码

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>imooc-video-mini-api</groupId>
  <artifactId>imooc-video-mini-api</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>har</packaging>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>net.sf.maven-har</groupId>
        <artifactId>maven-har-plugin</artifactId>
        <version>0.9</version>
        <extensions>true</extensions>
      </plugin>
    </plugins>
  </build>
</project>

复制代码

复制代码

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>imooc-video-mini-api</groupId>
  <artifactId>imooc-video-mini-api</artifactId>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.2.9.RELEASE</version>
    </dependency>
  </dependencies>
  <packaging>har</packaging>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>net.sf.maven-har</groupId>
        <artifactId>maven-har-plugin</artifactId>
        <version>0.9</version>
        <extensions>true</extensions>
      </plugin>
    </plugins>
  </build>
</project>

复制代码


socket进行监听,socket里面的


留言表

【愚公系列】《微信小程序与云开发从入门到实践》025-体验WeUl基础组件 随着微信小程序的普及,越来越多的开发者希望借助其强大的功能和便捷的用户体验,打造出更具吸引力的应用。而在小程序的开发过程中,UI设计则是提升用户体验的关键所在。WeUI,作为一套为微信场景设计的基础组件库,提供了丰富的UI组件和设计规范,帮助开发者快速构建符合微信风格的优雅界面。本篇文章将带你深入体验 WeUI 基础组件,介绍其核心功能和使用方法。我们将从 WeUI 的基本概念入手,逐步展示如何在微信小程序中集成和使用这些组件,包括按钮、表单、对话框、列表等常用元素。 阅读详情

相关推荐

微信小程序 (WeUI框架)

因为小程序的api描述都比较简单,并没有wxml及wxss的描述,有的人可能会想小程序有没有一个UI库。类似于前端中的常见的UI库例如Bootstrap、MDUI(简称MD)、Semantic UI(简称Semantic )、uni-app、MUI、Element等等类似的框架UI库 小程序UI库WeUI: 结果当前是当前有的,它就是微信小程序官方推出的小程序UI库WeUI。 WeUI是什么? W...

weixin_45343878的博客 722

微信小程序点击左边显示左边内容,点击右边显示右边内容

在页面的js文件中,您需要定义showLeft()和showRight()函数来实现按钮的交互。您可以创建两个视图容器组件,一个放在左边,一个放在右边。然后,您可以使用按钮或其他交互元素来触发视图容器组件的显示或隐藏。最后,在css文件中,您可以为左侧视图容器和右侧视图容器定义样式,如宽度、高度、位置等。您还可以为按钮定义样式,以更好地与您的应用程序主题和风格匹配。下面是一个示例代码,其中包括一个左侧视图容器和一个右侧视图容器,以及两个按钮,一个用于显示左侧视图容器,另一个用于显示右侧视图容器。

weixin_46504346的博客 2156

微信小程序开发入门教程(十一)

背景 终于入职了,线上入职远程办公,感概还是很多的,有机会专门写一下,刚入职熟悉项目,适应新的节奏还是需要时间的,所以时间可能不肯像以前那么充裕了,我尽力保持日更吧,其实之前的两篇都是之前的存稿,确实没什么精力,虽然没做什么事,但是还是觉得很累,可能就是如此吧,无论你是否愿意,生活总是推着我们不断向前。话不多说,之前我们介绍了微信小程序中的容器组件view和scroll-view,而容器内放置的就是各种基本组件,这篇文章就会主要介绍基本组件。 基础组件 icon组件 icon是页面中非常常见的组件,通常表示

QStack的博客 694

微信小程点击显示对应的内容

要实现微信小程序点击后显示对应的内容,可以使用wx:if和wx:else指令来控制显示或隐藏对应的内容。

weixin_46504346的博客 2191

零基础玩转华为AP 4050DN-HD:FAT模式家庭无线网络配置实战

本文为零基础用户提供华为AP 4050DN-HD从FIT模式转换为FAT模式的完整实战教程。详细介绍了固件升级、模式转换以及配置家庭无线网络(包括路由、DHCP、Wi-Fi和NAT)的每一步操作,帮助用户将企业级瘦AP改造为高性能家庭胖AP,打造稳定可靠的家庭网络环境。

weixin_29196613的博客 630

STM32HAL库学习笔记九——LCD显示

本文不会对驱动编写做特别详细的描述,以记录CubeMX的部署流程为主。

weixin_44762233的博客 6918

微信小程序点击显示或隐藏对应的图标

首先放一下我的效果图: 我这里是用的静态数据放到data中,在前台页面进行循环显示,接下来就直接放代码了。 index.wxml <view class="page"> <view class="page-hd"></view> <view class="page_bd"> <block wx:for="{{banji}}"...

weixin_45595203的博客 2667

博途V17 & PLCSIM & FactoryIO 连接教程

PLCSIM V17 和 FactoryIO 连接教程前言一、软件版本二、连接步骤1. 连接PLCSIM2. 博途编程3.连接FactoryIO总结 前言 该文详细讲解了新手入门博途,并通过使用自带PLCSIM和FactoryIO实现连接。 一、软件版本 TIA Portal V17 S7-PLCSIM V17 Factory IO V2.5.1 二、连接步骤 1. 连接PLCSIM 打开PLCSIM 进入项目模式 新建仿真项目 2. 博途编程 将F

soledad_chao的博客 2万+

微信小程序--微信自带的返回按钮操作(全局隐藏、单页隐藏、自定义返回按钮)

问题探究: 微信小程序中会默认自带导航菜单返回按钮箭头,当我们想隐藏返回箭头时,就引出有如下三种方法 一、全局隐藏返回箭头 1、在app.json中全局设置,则每个页面会隐藏返回箭头 "window":{ "navigationStyle":"custom" } 二、单个页面返回箭头隐藏 1、首先将返回箭头改为小房子图标(也就是返回主页按钮) wx.redirectTo({ url: '../index/index' }) 2、在对应跳..

lp-Strive的博客 3万+

农经权二轮延包—地块示意图生成

本文介绍了地块示意图制作软件的使用方法及模板制作要点。软件通过设置六个参数(示意图模板、属性数据、地块DBF、导航图、地块图片及存放位置)自动生成Word文档,并可导出PDF。文章详细说明了5页Word模板的制作过程,包括页脚三栏设置和页码插入技巧,支持每户最多28个地块的情况。同时指出该软件生成的图片分辨率(300dpi)满足清晰度要求,并提及软件免费提供插件但收费提供后续服务。

weixin_47364423的博客 1114

PCL RANSAC拟合空间圆【2026最新版】

RANSAC三维点云空间3D圆拟合。博客长期更新,本文最新更新时间为:2026年4月13日。代码在PCL1.15.0中测试通过

点云侠的博客 7455

微信小程序笔记(一)——点击显示或隐藏某一行数据

点击后隐藏或显示某一行数据。在小程序开发时,经常需要实现在点击完列表中的某一行数据后,就能展开其对应的相关内容或隐藏其对应的内容  index.wxml view class='text'> text>方法一text>view>view wx:for="{{list}}" wx:key="content" wx:for-index="key"> view class='titl

ABCGoods的博客 1万+

uniapp 如何封装实现任意页面都能使用的全局弹窗

项目内容场景全局监听消息提示难点uniapp 无法全局挂载组件解决方案动态创建 DOM + 动态 Vue 实例优势跨页面 / 不依赖页面组件树 / 灵活调用如果你使用的是小程序平台,DOM 操作可能受限,需要用或方式兼容处理。想支持多个弹窗堆叠?你可以扩展,加个弹窗队列管理器。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 944

微信小程序组件及属性详细说明

转自:http://tools.jb51.net/table/wx_component 微信小程序官方地址:https://mp.weixin.qq.com/debug/wxadoc/dev/component/ 基础组件 框架为开发者提供了一系列基础组件,开发者可以通过组合这些基础组件进行快速开发。 什么是组件: 组件是视图层的基本组成单元。 组件自带一些功能与微信风格的样式。 一个组件通常包括开始标签和结束标签,属性用来修饰这个组件,内容在两个标签之内。 <span style=.

一起coding,一起嗨。 2529

杰理SDK入门教程(一):编译环境的安装和程序下载

本文档提供了杰理SDK在Windows系统下的开发环境配置与代码编译指南。主要内容包括:1) 开发环境安装步骤,需下载Code::Blocks和杰理工具链;2) 编译过程中常见问题的解决方案,如安全警告提示和链接文件缺失问题;3) 代码编译流程说明,包括打开工程、连接开发板、执行编译等步骤。文档特别强调了强制升级模式的操作方法,并指出需避免点击运行/调试按钮。最后提示了杀毒软件可能误报工具链的注意事项。

qq_42014563的博客 2739

SAP-ABAP:新手入门篇——从0到1写出你的第一个ABAP Hello World程序并完成调试运行

本文是ABAP开发入门指南,详细介绍如何创建并运行第一个"Hello World"程序。主要内容包括:通过SE38事务码进入ABAP编辑器;创建以Z/Y开头的程序并保存为本地对象;编写简单的WRITE输出语句;完成语法检查、激活和执行流程;以及初步体验调试功能。文章特别强调ABAP开发的规范要求,如程序命名规则、激活与保存的区别等,并提供了详细的步骤说明和常见问题提示,帮助零基础开发者快速上手ABAP编程。

baidu_35680696的博客 479

微信小程序基础组件

微信小程序的提示框,确认框,模态框,页面跳转,轮播图,等

Crush_you的博客 781

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【微信小程序】第四章 总结

组件是页面视图层(WXML) 的基本组成单元, 组件组合可以构建功能强大的页面结构。小程序框架为开发者提供了容器视图、基础内容、表单、导航、多媒体、地图、画布、开放能力等8 类(30多个) 基础组件。每一个组件都由一对标签组成,有开始标签和结束标签,内容放置在开始标签和结束标签之间,内容也可以是组件。组件的语法格式如下:< 标签名 属性名= ”属性值” > 内容...< /标签名>组件通过属性来进一步细化。

m0_73027263的博客 1031

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

微信小程序(页面组件)

组件是页面视图层(WXML)的基本组成单元,组件组合可以构建功能强大的页面结构。小程序框架为开发者提供了容器视图 基础内容、表单、导航、多媒体、地图、画布、开放能力等8类(30多个)基础组件。每一个组件都由一对标签组成,有开始台标签和结束标签,内容放置在开始标签和结束标签之间,内容也可以是组件。<标签名 属性名="属性值">内容...</标签名>组件通过属性来进一步细化。不同的组件可以有不同的属性,但它们也有一些共用属。

2303_79629194的博客 2079

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

微信小程序 - 组件

微信小程序为开发者提供了一系列基础组件,使开发者可以进行快速开发。同时还支持自定义组件,提升代码复用性,有助于代码维护。 一、基础组件 基础组件主要分为:视图容器、基础内容、表单组件、导航、媒体组件、地图、画布、开放能力、原生组件、无障碍访问。 微信小程序官方文档 - 组件:https://developers.weixin.qq.com/miniprogram/dev/component/...

BradyCC的博客 441

微信小程序入门教程+案例demo

微信小程序入门教程+案例demo 尊重原创,转载请注明出处:原文查看惊喜更多 http://blog.youkuaiyun.com/qq137722697 首先摆在好姿态,——微信小程序开发也就那么回事。你只需要一点点css(真的只要一点点)的基础就可以了。 认清微信小程序开发其实,我觉得小程序就是将微信官方提供20+个基础组件(目前有26个)进行排列组合,然后加上一些css样式,对用户的操作进行反馈(调

大力哥的博客 16万+

五.微信小程序 基础组件

微信小程序 基础组件 文章目录微信小程序 基础组件一.基础组件二.属性类型三.共同属性类型四.组件列表1. 视图容器( View Container):2. 基础内容(Basic Content):3. 表单(Form):4. 导航(Navigation):5. 多媒体(Media):6. 地图(Map):7. 画布(Canvas):8. 客服会话: 一.基础组件 组件是视图层的基本组成单位. ...

weixin_43167546的博客 785

微信小程序_基础组件大全

微信小程序_基础组件大全 微信小程序_基础组件 微信小程序为小程序开发者提供了一系列小程序基础组件,开发者可以通过组合这些小程序基础组件进行微信小程序的快速开发。 微信小程序组件是什么?微信小程序组件怎么用? 小程序组件是视图层的基本组成单元。小程序组件自带一些功能与微信风格的样式。一个小程序组件通常包括开始标签和结束标签,属性用来修饰这...

weixin_30274627的博客 469

微信小程序第四章总结

组件是页面视图层(WXML)的基本组成单元,组件组合可以构建功能强大的页面结构。小程序框架为开发者提供了容器视图、基础内容、表单、导航、多媒体、地图、画布、开放能力等8类(30多个)基础组件。每一个组件都由一对标签组成,有开始标签和结束标签,内容放置在开始标签和结束标签之间,内容也可以是组件。组件通过属性来进一步细化。不同的组件可以有不同的属性,但它们也有一些共用属性,如id、class、style、hidden、data-*、bind*/catch*等。

dengsunzi的博客 668

【微信小程序】第四章总结

组件是页面视图层(WXML的基本组成单元组件组合可以构建功能强大的页面结构。小程序框架为开发者提供了容器视图、基础内容、表单、导航、多媒体、地图、画布、开放能力等8 类30 多个基础组件。内容...不同的组件可以有不同的属性但它们也有一些共用属性如id、class、style、hidden、data - *,bind*/catch*等。id 组件的唯一表示,保持整个页面唯一不常用。class组件的样式类,

qq_74842025的博客 466
上一篇: 消息中间件实现分布式事务
下一篇: SpringBoot基于RateLimiter+AOP动态的为不同接口限流(转载)
乐天_米豆
博客等级 码龄9年 31粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值