页面组件(第四章总结)

4.1组件的定义及属性:

        组件是页面视图层(WXM)的基本组成单元,组件组合可以构建功能强大的页面结构。小程序框架为开发者提供了容器视图、基础内容、表单、导航、多媒体、地图、画布开放能力等8类(30多个)基础组件。

        每一个组件都由一对标签组成,有开始标签和结束标签,内容放置在开始标签和结束标签之间,内容也可以是组件。组件的语法格式如下:

       <标签名 属性名=”属性值”>内容…标签名>

        组件通过属性来进一步细化+。不同的组件可以有不同的属性,但它们也有一些共用属性如id、classstyle、hidden、data##bind*/catch *等

        id 组件的唯一表示,保持整个页面唯一不常用。

        class组件的样式类,对应WXSS中定义的样式。

        style组件的内联样式,可以动态设置内联样式。

        hidden组件是否显示,所有组件默认显示。

        data-*自定义属性,组件触发事件时,会发送给事件处理函数。事件处理函数可以通过传入参数对象的currerTarget.datasel 方式来获取自定义属性的值。

       bind*/catch*组件的事件,绑定逻辑层相关事件处理涵数。

4.2容器视图组件:

          容器视图组件是能容纳其他组件的组件,是构建小程序页面布局的基础组件,主要包括view,scroll- view和swiper组件。


4.2.1view


        view组件是块级组件,没有特殊功能,主要用于布局展示,相当于HTML中的div,是布局中最基本的用户界面(User Interface,UI)组件,通过设置view的CSS属性可以实现各种复杂的布局。view组件的特有属性如表所示。

bd70a5a16d534730a089f7ded2939ca4.png

ec113f3e46984884bdb234bd107db9fb.png

示例代码:

<view style="text-align: center">默认flex布局</view>
<view style="display: flex">
<view style="border: 1px solid #F00;flex-grow: 1">1</view>
<view style="border: 1px solid #F00;flex-grow: 1">2</view>
<view style="border: 1px solid #F00;flex-grow: 1">3</view>
</view>
<view style="text-align: center">上下混合布局</view>
<view style="display: flex;flex-direction: column">
<view style="border: 1px solid#f00;">1</view>
<view style="display: flex">
<view style="border: 1px solid #f00;flex-grow:1">2</view>
<view style="border: 1px solid #f00;flex-grow:2">3</view>
</view>
</view>
<view style="text-align: center">左右混合布局</view>
<view style="display: flex">
<view style="border: 1px solid #f00;flex-grow: 1;">1</view>
<view style="display: flex;flex-direction: column;flex-grow: 1">
<view style="border: 1px solid #f00;flex-grow: 1;">2</view>
<view style="border: 1px solid #f00;flex-grow: 2;">3</view>
</view>
</view>

运行结果:

421acaa62e444ee2bed7407ec784247d.png

4.2.2scroll-view:

通过设置scroll-view组件的相关属性可以实现滚动视图的功能,其属性如表所示:

cd01993002e54b2385fa2b7457688203.png

【注意】
(1)在使用竖向滚动时,如果需要给 scrll-view 组件设置一个固定高度,可以通过WXSS设置height来完成。
(2)请勿在scroll-view组件中使用textarea、map、canva3、video 组件
(3) scroll--into- view属性的I优先级高于scrll-top。
(4)由于在使用scroll-view组件时会阻止页面回弹,所以在scroll -view组件滚动时无法触发onPullDownRefresho
(5)如果要实现页面下拉刷新,请使用页面的滚动,而不是设置scrll-view组件。这样做,能通过单击顶部状态栏回到页面顶部。
通过scroll-view组件可以实现下拉刷新和上拉加载更多,

代码如下:

.wxml:

<view class="container" style="padding: 0rpx;">
<scroll-view scroll-top="{{scrollTop}}" scroll-y="true" style="height: {{scrollHeight}}px;" class="list" bindscrolltolower="bindscrolltolower"
bindscrolltoupper="topLoad" bindscrolltoupper="scroll">
<view class="item" wx:for="{{list}}">
<image class="img" src="{{item.pic_url}}"/>
<view class="text">
<text class="title">{{item.name}}</text>
<text class="description">{{item.short_description}}</text>
</view>
</view>
</scroll-view>
<view class="body-view">
<loading hidden="{{hidden}}" bindchange="loadingChange">加载中...</loading>
</view>
</view>

.js:

var url="http://www.imooc.com/course/ajaxlist";
var page=0;
var page_size=5;
var sort="last";
var is_easy=0;
var lange_id=0;
var pos_id=0;
var unlearn=0;
var loadMore=function(that){
  that.setData({
    hidden:false
  });
 
wx.request({
  url: 'url',
 
data: {
  page:page,
  page_size:page_size,
  sort:sort,
  is_easy:is_easy,
  lange_id:lange_id,
  pos_id:pos_id,
  unlearn:unlearn
},
succes:function(res){
  //console.info(that.data.list);
  var list=that.data.list;
  for(var i=0;i<res.data.list.length;i++){
    list.push(res.data.list[i]);
  }
  that.setData({
    list:list
  });
  page++;
  that.setData({
    hidden:true
  });
}
});
}
Page({
 data:{
   hidden:true,
   listt:[],
   scrollTop:0,
   scrollHeight:0
 },
 onLoad:function(){
   var that=this;
   wx:wx.getSystemInfo({
     success: function(res){
       that.setData({
         scrollHeight:res.windowHeight
       });
     }
   });
   loadMore(that);
 },
 bindDoenLond:function(){
   var that=this;
   loadMore(that);
   console.log("lower");
 },
 scroll:function(event){
   this.setData({
     scrollTop:event.detail.scrollTop
   });
 },
 topLoad:function(event){
   page=0;
   this.setData({
     list:[],
     scrollTop:0
   });
   loadMore(this);
   console.log("lower");
 }
})

.wxss:

.userinfo{
  display: flex;
  flex-direction: column;
  align-items: center;
}
.userinfo-avatar{
  width: 128rpx;
  height: 128rpx;
  margin: 20rpx;
  border-radius: 50%;
}
.userinfo-nickname{
  color: #aaa;
}
.usermotto{
  margin-top: 200px;
}
scroll-view{
  width: 100%;
}
.item{
  width: 90%;
  height: 300rpx;
  margin: 20rpx auto;
  background: brown;
  overflow: hidden;
}
.item .img{
  width: 430rpx;
  margin-right: 20px;
  float: left;
}
.title{
  font-size: 30px;
  display: block;
  margin: 30rpx auto;
}
.description{
  font-size: 26rpx;
  line-height: 15rpx;
}

4.2.3swiper

        wiper组件可以实现轮播图、图片预览、滑动页面等效果。一个完整的swiper 组件<swiper/>和<swiper-item/>两个标签组成,它们不能单独使用。<swiper/>中只能放置一个或多个<swiper-item/>若放置其他组件则会被删除5<swiper-item/>内部可以放置任何组件,默认宽高自动设置为100%。swiper组件的属性如表所示

82e11c1be7f84c5a80ace6696e441b32.png

        <swiper-item/>组件为滑块项组件,仅可以被放置在<swiper/>组件中,宽高尺寸默认按100%显示。

        设置swiper组件,可以实现轮播图效果,代码如下:

代码:

<swiper indicator-dots='true' autoplay='true' interval="5000" duration='1000'>
<swiper-item>
<image src="/pages/tp/1.jpg" style="width: 100%"></image>
</swiper-item>
<swiper-item>
  <image src="/pages/tp/2.jpg" style="width: 100%"></image>
</swiper-item>
<swiper-item>
  <image src="/pages/tp/3.jpg" style="width: 100%"></image>
</swiper-item>
</swiper>

运行结果:

be2c585ec97d4e8f982efcef8a0e6253.png

4.3基础内容组件:

基础内容组件包括icon,text,和progress主要用于在视图页面中展示图标,文本,和进度条等信息。

4.4.1icon:

icon组件即图标组件通常用于表示一种状态如success,info,warn,waiting,cancel等,其属性如表所示:

0bc422918e254a23a290e13d91394c74.png

代码:

//.wxml
<view>
<block wx:for="{{iconType}}">
<icon type="{{item}}"/>{{item}}
</block>
</view>
<view>icon 大小:
<block wx:for="{{iconSize}}">
<icon type="success"size="{{item}}"/>{{item}}
</block>
</view>
<view>icon 颜色:
<block wx:for="{{iconColor}}">
<icon type="success"size="30"color="{{item}}"/>{{item}}
</block>
</view>
//.js
Page({
  data: {
  iconType:[ "success","success_no_circle","info","warn","wait-ing","cancel","download","search","clear"],
  iconSize:[10,20,30,40],
  iconColor:['#f00','#0f0','#00f']

  }})

运行结果:

2cecc85c0181427fa458b620e75cee70.png

4.3.2text:

text组件用于展示内容,类似HTML中的<span>,text组件中的内容支持长按选中,支持转义字符"\",属于行内元素。text组件的属性如表

e482e42b53ad47eb98c10a6850ddf393.png

代码:

//.wxml
<block wx:for="{{x}}"wx:for-item="x">
<view claass="aa">
<block wx:for="{{25-x}}" wx:for-item="x">
<text decode="{{true}}"space="{{true}}">&nbsp;</text>
</block>
<block wx:for="{{y}}" wx:for-item="y">
<block wx:if="{{y<=2*x-1}}">
<text>*</text>
</block>
</block>
</view>
</block>
<block wx:for="{{x}}"wx:for-item="x">
<view claass="aa">
<block wx:for="{{19+x}}" wx:for-item="x">
<text decode="{{true}}"space="{{true}}">&nbsp;</text>
</block>
<block wx:for="{{y}}" wx:for-item="y">
<block wx:if="{{y<=11-2*x}}">
<text>*</text>
</block>
</block>
</view>
</block>
//.js
Page({
  data: {
x:[1,2,3,4,5],
y:[1,2,3,4,5,6,7,8,9]
  }})

运行结果:

fe526aa75de04cb48b7cb1cdfaf31eef.png

4.3.3progress:

progress组件用于显示进度状态,如资料加载,用户资料完成度。媒体资料播放进度等。

progress组件属于块级元素,其属性如表

2a21bad68fc248c2bc7fe8e75e61c13a.png

代码:

//.wxml
<view>显示百分比</view>
<progress percent='80' show-info='80'></progress>
<view>改变宽带</view>
<progress percent='50'stroke-width='2'></progress>
<view>自动显示进度条</view>
<progress percent='80' active></progress>

运行结果:

2788d63f12374324b729681970cd475f.png

4.4表单组件:

        表单组件的主要功能是收集用户信息,并将这些信息传递给后台服务器实现小程序与用户之间的沟通。表单组件不仅可以放置在<form/> 标签中使用,还可以作为单位组件和其他组件混合使用。

4.4.1button


        button 组件用来实现用户和应用之间的交互,同时按钮的颜色起引导作用。一般来说,在一个程序中一个按钮至少有3种状态:默认点击(default)、建议点击(primary)、谨慎点击(warn)在构建项目时,应在合适的场景使用合适的按钮,当<button>被<form/>包裹时,可以通过设form-type属性来触发表单对应的事件。button组件的属性如表所示:

5c0d4fec83824d2cac525ce79c670e0e.png

代码:

//.wxml
<button type="default">type:default</button>
<button type="primary">type:primary</button>
<button type="warn">type:warn</button>
<button type="default"bindtap='buttonSize'size="{{size}}">改变size</button>
<button type="default"bindtap='buttonPlain'Plain="{{Plain}}">改变Plain</button>
<button type="default"bindtap='buttonLoading'loading="{{load-ing}}">改变loading显示</button>
//.js
Page({
  data:{
    size:'default',
    plain:'false',
    loading:'false'
  },
  //改变按钮的大小
  buttonSize:function(){
    if(this.data.size =="default")
    this.setData({ size:'mini'})
  else
  this.setData({size:'default'})
  },
  //是否显示镂空
  buttonPlain:function(){
    this.setData({ plain:! this.data.plain})
  },
  //是否显示loading图案
  buttonLoading:function(){
    this.setData({
      loading:! this.data.loading
    })
  }
  })

运行结果:

bff3c8831acd4e1ea50bb5e32d144b58.png

4.4.2radio:

        单选框用来从一组选项中选取一个选项。在小程序中,单选框由<radio=group/>(单项选择器)和<radio/>(单选项目)个组件组合而成,一个包含多个<radio/>的<radio —group/>表示一组单选项,在同一组单选项中<radio/>是互斥的,当一个按钮被选中后,之前选中的按钮就变为选。它们的属性如表所示:

ba3a4f7210b5471d900b6f09caed53fe.png

示例代码:

//.wxml
<view>请选择您喜欢的城市:</view>
<radio-group bindchange ="citychange">
<radio value="西安">西安</radio>
<radio value="北京">北京</radio>
<radio value="上海">上海</radio>
<radio value="广州">广州</radio>
<radio value="深圳">深圳</radio>
</radio-group>
<view>你的选择:{{city}}</view>
<view>选择你喜爱的计算机语言:</view>
<radio-group class="radio-group" bindchange="radiochange">
<label class="radio" wx:for="{{radios}}">
<radio value=" {{item.value}}" checked="{{item.checked}}"/>{{item.name}}
</label>
</radio-group>
<view>你的选择:{{lang}}</view>
//.js
Page({
  data:{
 radios:[
   { name:'java',value:'JAVA'},
   { name:'python',value:'Python',checked:'true'},
   { name:'php',value:'PHP'},
   { name:'wsif',value:'Swif'},
 ],
 city:'',
 lang:''
},
citychange:function(e){
this.setData({ city:e.detail.value });

},
radiochange: function(event){
  this.setData({ lang:event.detail.value});
  console.log( event.detail.value)
}
})

运行结果:

a572a8e4c86d4fdfaadf80aee77b955e.png

4.4.3checkbox:

复选框用于从一组选项中选取多个选项,小f程序中复选框由<checkbox-group/>(多项选择器)和<checkbox/>(多选项目)两个组件组合而成。一个<checkbox-group/>表示一组选项,可以在一组选项中选中多个选项。它们的属性如表:

6981c6f02dfa427a96fde010289beffe.png

代码:

//.wxml
<view>选择您想去的城市:</view>
<checkbox-group  bindchange="citychange">
<label  wx:for="{{citys}}">
<checkbox value=" {{item.value}}" checked='{{item.checked}}'>{{item.value}}
</checkbox>
</label>
</checkbox-group>
<view>你的选择是:{{city}}</view>
//.js
Page({
  city:'',
  data:{
 citys:[
   { name:'km',value:'昆明'},
   { name:'sy',value:'三亚'},
   { name:'zh',value:'珠海',checked:'true'},
   { name:'dl',value:'大连'},
 ]
},


citychange: function(e){
  console.log( e.detail.value)
var city = e.detail.value;
this.setData({ city:city })

}
})

运行结果:

4cd8cf7f12ab4575879bd9f3b9dd83ad.png

4.4.4switch:

switch组件的作用类似开关选择器,其属性如表:

de45256d16aa42c4aa7913fcf8ddaac9.png

代码:

//.wxml
<view>
<switch bindchange="sw1">{{var1}}</switch>
</view>
<view>
<switch bindchange="sw2">{{var2}}</switch>
</view>
<view>
<switch type="checkbox" bindchange="sw3">{{var3}}</switch>
</view>
//.js
Page({
  data:{
    var1:'关',
    var2:'开',
    var3:'未选'
  },
  sw1:function(e){
    this.setData({var1:e.detail.value?'开':'关'})
  },
  sw2:function(e){
    this.setData({var2:e.detail.value?'开':'关'})
  },
  sw3:function(e){
    this.setData({var3:e.detail.value?'已选':'未选'})
  },
})

运行结果:

4.4.5slider:

slider组件为滑动选择器,可以通过滑动来设置相应的值,其属性如表:

5166929f15ab4ceeb9e53c80ec696730.png

代码:

//.wxml
<view>默认 min=0 max=100 step=1</view>
<slider />
<view>显示当前值</view>
<slider show-value/>
<view>设置min=20 max=200 step=10</view>
<slider min='0' max='200' step='10' show-value></slider>
 
<view>背景条红色,已选定颜色绿色</view>
<slider color="#f00" selected-color="#0f0"/>
 
<view>滑条改变icon的大小</view>
<slider show-value bindchange="sliderchange"/>
<icon type="success" size="{{size}}"/>
//.js
Page({
  data:{
    size:'20'
  },
  sliderchange:function(e){
    this.setData({size:e.detail.value})
  }
})

运行结果:

4.4.6picker 


picker 组件为滚动选择器,当用户点击picker 组件时,系统从底部弹出选择器供用户选择。 picker 组件目前支持5 种选择器,分别是: selector (普通选择器)、multiSelector (多列选择器)、time (时间选择器)、date (日期选择器)、region (省市选择器)。

普通选择器(mode= selector ) 的属性如表所示:

代码:

//.wxml
<view>----range为数组----</view>
<picker range="{{array}}" value="{{index1}}" bindchange="arrayChange">
  当前选择:{{array[index1]}}
</picker>
<view>----range为数组对象----</view>
<picker bindchange="objArrayChange" value="{{index2}}" range-key="name" range="{{objArray}}">
  当前选择:{{objArray[index2].name}}
</picker>
//.js
Page({
  data:{
    array:['Java','Python','C','C#'],
    objArray:[
      {id:0,name:'Java'},
      {id:1,name:'Python'},
      {id:2,name:'C'},
      {id:3,name:'#C'}
    ],
    index1:0,
    index2:0
  },
  arrayChange:function(e){
    console.log('picker值变为',e.detail.value)
    var index=0;
    this.setData({
      index1:e.detail.value
    })
  },
  objArrayChange:function(e){
    console.log('picker值变为',e.detail.value)
    this.setData({
      index2:e.detail.value
    })
  }
  })

运行结果:

多列选择器(mode= multiSelector) 允许用户从不同列中选择不同的选择项, 其选项是二维数组或数组对象。 多列选择器的属性如表所示。

代码:

//.wxml
<view>多列选择器</view>
<picker mode="multiSelector" bindchange="bindMultiPickerChang" blindcolumnchange="bindMultiPickerColumnChang" value="{{multiIndex}}"
range="{{multiArray}}">
<view>
当前选择:{{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}}
</view>
</picker>
//.js
Page({
  data:{
    multiArray:[['陕西省','广东省'],['西安市','汉中市','延安市'],['雁塔区','长安区']],
    multiIndex:[0,0,0]
  },
  bindMultiPickerChang:function(e){
    console.log('picker发送选择改变,携带值为',e.detail.value)
    this.setData({
      multiIndex:e.detail.value
    })
  },
  bindMultiPickerColumnChang:function(e){
    console.log('修改的列为',e.detail.column,',值为',e.detail.value);
    var data={
      multiArray:this.data.multiArray,
      multiIndex:this.data.multiIndex
    };
    data.multiIndex[e.detail.column]=e.detail.value;
    switch(e.detail.column){
      case 0:
      switch(data.multiIndex[0]){
       case 0:
      data.multiArray[1]=['西安市','汉中市','延安市'];
      data.multiArray[2]=['雁塔区','长安区'];
      break;
      case 1:
      data.multiArray[1]=['深圳市','珠海市'];
      data.multiArray[2]=['南山区','罗湖区'];
      break;
    }
    data.multiIndex[1]=0;
    data.multiIndex[2]=0;
    break;
    case 1:
    switch(data.multiIndex[0]){
      case 0:
      switch(data.multiIndex[1]){
        case 0:
        data.multiArray[2]=['雁塔区','长安区'];
        break;
        case 1:
        data.multiArray[2]=['汉台区','南郑区'];
        break;
        case 2:
        data.multiArray[2]=['宝塔区','子长县','延川县'];
        break;
      }
      break;
      case 1:
      switch(data.multiIndex[1]){
        case 0:
        data.multiArray[2]=['南山区','罗湖区'];
        break;
        case 1:
        data.multiArray[2]=['香洲区','斗门区'];
        break;
      }
      break;
    }
    data.multiIndex[2]=0;
    console.log(data.multiIndex);
    break;
  }
  this.setData(data);
  }
  })

运行结果:

3.时间选择器、日期选择器

时间选择器(mode= time) 可以用于从提供的时间选项中选择相应的时间,其属性如表 所示。

日期选择器(mode= date) 可以用于从提供的日期选项中选择相应的日期,其属性如表所示。

代码:

//.wxml
<view>
<picker mode="date" start="{{startdate}}" end="{{enddate}}" value="{{date}}" bindchange="changedate">
  选择的日期:{{date}}
</picker>
</view>
<view>
<picker mode="time" start="{{starttime}}" end="{{endtime}}" bindchange="changetime">
  选择的时间:{{time}}
</picker>
</view>
//.js
Page({
  data:{
    startdate:2000,
    enddate:2050,
    date:'2024',
    starttime:'00:00',
    endtime:'12:59',
    time:'8:00'
  },
  changedate:function(e){
    this.setData({date:e.detail.value});
    console.log(e.detail.value)
  },
  changetime:function(e){
    this.setData({time:e.detail.value});
    console.log(e.detail.value)
  }
})

运行结果:

4.省市选择器

省市选择器(mode= region) 是小程序的新版本提供的选择快速地区的组件,其属性如表所示。

代码:

//.wxml
<picker mode="region" value="{{region}}" custom-item="{{customitem}}" bindchange="changeeregion">
  选择省市区:{{region[0]}},{{region[1]}},{{region[2]}}
</picker>
//.js
Page({
  data:{
    region:['陕西省','西安市','长安区'],
    customitem:'全部'
  },
  changeeregion:function(e){
    console.log(e.detail.value)
    this.setData({
      region:e.detail.value
    })
  }
})

运行结果:

4.4.7picker—view

picker-view 组件为嵌人页面的滚动选择器。相对于picker 组件,picker -view 组件的列的个数和列的内容由用户通过<picker - viewcolumn/>自定义设置。picker -view 组件的属性如表所示

a13d3c8cf75740499ed9fd3b441e7ef5.png

 代码:

//.wxml
<view>当前日期:{{year}}年{{month}}月{{day}}日</view>
<picker-view indicator-style="height: 50px;" style="width: 100%; height: 300px;" value="{{value}}" bindchange="bindChange">
  <picker-view-column>
    <view wx:for="{{years}}" style="line-height: 50px;">{{item}}年</view>
  </picker-view-column>
  <picker-view-column>
    <view wx:for="{{months}}" style="line-height: 50px;">{{item}}月</view>
  </picker-view-column>
  <picker-view-column>
    <view wx:for="{{days}}" style="line-height: 50px;">{{item}}日</view>
  </picker-view-column>
</picker-view>
//.js
const date = new Date();
const years = [];
const months = [];
const days = [];
for (let i = 1900; i <= 2050; i++) {
  years.push(i);
}
for (let i = 1; i <= 12; i++) {
  months.push(i);
}
for (let i = 1; i <= 31; i++) {
  days.push(i);
}
Page({
  data: {
    years: years,
    months: months,
    days: days,
    year: date.getFullYear(),
    month: date.getMonth() + 1,
    day: date.getDate(),
    value: [date.getFullYear() - 1900, date.getMonth(), date.getDate() - 1]
  },
  bindChange: function (e) {
    const val = e.detail.value;
    this.setData({
      year: this.data.years[val[0]],
      month: this.data.months[val[1]],
      day: this.data.days[val[2]]
    });
  }
})

运行结果:

4.4.8input

input组件为输入框,用户可以输入相应的信息,其属性如表:

09d454cde1874675838a37275a9ebbbb.png

8d6bf31c2e884dd6a39448cd05702439.png

 代码:

//.wxml
<input placeholder="这是一个可以自动聚焦的 input" auto-focus/>
<input placeholder="这是一个只有在按钮带点击的时候才聚焦的 input" focus="{{focus}}"/>
<button bind:tap="bindButtonTop">使得输入框获得焦点</button>
<input maxlength="10" placeholder="最大输入长度为10"/>
<view class="section_title">你输入的是:{{inputValue}}</view>
<input bindinput="bindKeyInput" placeholder="输入同步到view中"/>
<input bindinput="bindReplaceInput" placeholder="连续的两个1会变成2"/>
<input password type="number" placeholder="输入数字密码"/>
<input password type="text" placeholder="输入字符密码"/>
<input type="digit" placeholder="带小数点的数字键盘"/>
<input type="idcard" placeholder="身份证输入键盘"/>
<input placeholder-style="color:red" placeholder="占位符字体是红色的"/>
//.js
Page({
  data:{
    focus:false,
    inputValue:''
  },
  bindButtonTop:function(){
    this.setData({
      focus:true
    })
  },
  bindKeyInput:function(e){
    this.setData({
      inputValue:e.detail.value
    })
  },
  bindReplaceInput:function(e){
    var value=e.detail.value
    var pos=e.detail.value
    if(pos!=-1){
      var left=e.detail.value.slice(0,pos)
      pos=left.replace(/11/g,'2').length
    }
    return{
      value:value.replace(/11/g,'2'),
      cursor:pos
    } 
  }
})

运行结果:

4.4.9textarea

textare组件为多行输入框组件,可以实现多行内容的输入。textarer组件的属性如表:

d962fd8c860f422685c2862339296ed9.png

102d063d30764db29e67efa97872151e.png

代码:

//.wxml
<textarea bindblur="bindTextAreaBlur" auto-height placeholder="自动变高"></textarea>
<textarea placeholder="placeholder颜色是红色的"placeholder-style="color:red;"></textarea>
<textarea placeholder="这个只有在按钮点击的时候才聚焦"focus="{{focus}}"></textarea>
<button bind:tap="bindButtonTap">使得输入框获取焦点</button>
<form bindsubmit="bindFormSubmit">
<textarea placeholder="form中的textarea"name="textarea"></textarea>
<button form-type="submit">提交</button>
</form>
//.js
Page({
  data:{
    height:10,
    focus:false
  },
  bindButtonTap:function(){
    this.setData({
      focus:true
    })
  },
  bindTextAreaBlur:function(e){
    console.log(e.detail.value)
  },
  bindFormSubmit:function(e){
    console.log(e.detail.value.textarea)
  }
})

运行结果:

4.4.10label

label组件为标签组件,用于提升表单组件的可用性。label组件支持使用for属性找到对应的i,或者将控件放在该标签下,当点击label组件时,就会触发对应的控件。for属性的优先级高于内部控件,内部有多个控件的时候默认触发第一个控件。目前,label组件可以绑定的控件有<button/><checkbox/><radio/>、<switch/>。

代码:

//.wxml
<view><checkbox></checkbox>中国</view>
<view><label><checkbox></checkbox>中国</label></view>
<checkbox-group bindchange="cityChange">
<label wx:for="{{citys}}">
<checkbox value="{{item.value}}"checked='{{item.checked}}'>{{item.value}}</checkbox>
</label>
</checkbox-group>
<view>您的选择是:{{city}}</view>
//.js
Page({
  data:{
    citys:[
      {name:'km',value:'昆明'},
      {name:'sy',value:'三亚'},
      {name:'zh',value:'珠海',checked:'true'},
      {name:'dl',value:'大连'}
    ]
  },
  cityChange:function(e){
    console.log(e.detail.value);
    var city=e.detail.value;
    this.setData({city:city})
  }
  })

运行结果:

4.4.11form

form组件为表单组件,用来实现将组件内的用户输入信息进行提交。当<form/>表单中formType为submit的<button/>组件时,会将表单组件中的value值进行提交。form组件的属性如表所示。

6646317583394b32a07abb48b3790d2e.png

代码:

//.wxml
<form bindsubmit="formSubmit" bindreset="formReset">
<view>姓名:
<input type="text" name="xm"/>
</view>
<view>性别:
<radio-group name="xb">
<label>
<radio value="男" checked/>男</label>
<label>
<radio value="女"/>女</label>
</radio-group>
</view>
<view>爱好:
<checkbox-group name="hobby">
<label wx:for="{{hobbies}}">
<checkbox value="{{item.value}}"checked='{{item.checked}}'>{{item.value}}</checkbox>
</label>
</checkbox-group>
</view>
<button form-type="submit">提交</button>
<button form-type="reset">重置</button>
</form>
//.js
Page({
  hobby:'',
  data:{
    hobbies:[
      {name:'jsj',value:'计算机',checked:'true'},
      {name:'music',value:'听音乐'},
      {name:'game',value:'玩电竞'},
      {name:'swim',value:'游泳',checked:'true'}
    ]
  },
  forSubmit:function(e){
    console.log('form发生了submit事件,携带数据为:',e.detail.value)
  },
  formReset:function(){
    console.log('form发生了reset事件')
  }
})

运行结果:

4.5多媒体组件

多媒体组件包含image(图像)、audio(音频)、video(视频)、camera(相机)组件,使用这些组件,可以让页面更具有吸引力。

4.5.1image

image组件为图像组件,与HTML中的<img/>类似,系统默认image组件的宽度为300 px、高度为2250 px,image组件的属性如表

image组件中的mode属性有13种模式,其中缩放模式有4种,裁剪模式有9种

缩放模式:


scaleToFil|不保持纵横比缩放图片,使图片的宽高完全拉伸至填满image元素aspectFit保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以将图片完整地显示出来。aspectFill保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,在另一个方向将会发生截取。widthFix宽度不变,高度自动变化,保持原图宽高比不变

代码:

//.wxml
<block wx:for="{{modes}}">
<view>当前图片的模式是:{{item}}</view>
<image mode="{{item}}" src="/pages/tp/1.jpg" style="width: 100% height:100%"/>
</block>
//.js
Page({

  data:{

modes:['scaleToFill','aspectFit','aspectFill','widthFix']
}

})

运行结果:

裁剪模式


top不缩放图片,只显示图片的顶部区域。
bottom不缩放图片,只显示图片的底部区域
center不缩放图片,只显示图片的中间区域
left不缩放图片,只显示图片的左边区域。
right不缩放图片,只显示图片的右边区域。
top_left不缩放图片,只显示图片的左上边区域。
top_right不缩放图片,只显示图片的右上边区域。
bottom_ left不缩放图片,只显示图片的左下边区域。
bottom_ right不缩放图片,只显示图片的右下边区域。

代码:

//.wxml
<block wx:for="{{modes}}">
<view>当前图片的模式是:{{item}}</view>
<image mode="{{item}}" src="/pages/tp/1.jpg" style="width:100%,height 100%" />
</block>
//.js
Page({
  data:{
    modes:['top','center','bottom','left','top_left','top_right','bottom_left','bottom_right']
  }
})

运行结果:

4.5.2audio

audio组件用来实现音乐播放、暂停等,其属性如表:

代码:

//.wxml
<audio src="{{src}}" poster="{{poster}}" name="{{name}}" author="{{author}}" loop controls ></audio>
<button type="primary" bindtap="play">播放</button>
<button type="primary" bindtap="pause">暂停</button>
<button type="primary" bindtap="setPlayRate">设置速率</button>
<button type="primary" bindtap="setCurrentTime">设置当前时间(秒)</button>
//.js
Page({
  data:{
    poster:'http://y.gtimg.cn/music/photo_new/T002R300x300M000003rsKF44GyaSk.jpg ? max_age=2592000',
    name:'此时此刻',
    author:'许巍',
    src:'https://ws6.stream.qqmusic.qq.com/RS02060Uf6fc0fILAt.mp3?guid=6031362059&vkey=8AF94726EA2E3AB6365F98368EE4B0838B8EEB168A5DBC14A582392D53095D6FE30ACF0EBA1BEB16BF3ACAB8D637EBB3B99ABE510A0D131E&uin=&fromtag=120052'
  },
  play:function(){
    this.setData({
      action:{
        method:'pause'
      }
    })
  },
  playRate:function(){
    this.setData({
      action:{
        method:'setPlaybackRate',
        data:10
      }
    })
    console.log('当前速率:' +this.data.action.data)
  },
  currentTime:function(e){
    this.setData({
      action:{
        method:'setCurrentTime',
        data:120
      }
    })
  }
})

运行结果:

4.5.3vide


video组件用来实现视频的播放、暂停等。视频的默认宽度为300 px,高度为225 px,,video组件的属性如表:

代码:

//.wxml
<video src="{{src}}" controls ></video>
<view class="btn-area">
<button bind:tap="bindButtonTap">获取视频</button>
</view>
//.js
Page({
  data:{
    src:'',
  },
  bindButtonTap:function(){
    var that=this
    wx.chooseVideo({
      sourceType:['album','camers'],
      camera:['front','back'],
      maxDuration: 60,
      sourceType:function(res){
        src:res.tempFilePath
      }
    })
  }
})

运行结果:

4.5.4camera

camera组件为系统相机组件,可以实现拍照或录像功能。在一个页面中,只能有一个camera组件。在开发工具中运行时,使用电脑摄像头实现拍照或录像;在手机中运行时,使用手机前后摄像头实现拍照或录像camera组件的属性如表:

代码:

//.wxml
 <camera device-position="back" flash="off" binderror="error" style="width: 100%;height: 350px;"></camera>
<button type="primary" bind:tap="takePhoto">拍照</button>
<view>预览</view>
<image mode="widthFix" src="{{src}}"></image>
//.js
Page({
  takePhoto(){
    const ctx=wx.createCameraContext()
    ctx.takePhoto({
      quality:'high',
      success:(res)=>{
        this.setData({
          src:res.tempImagePath
        })
      }
    })
  },
  error(e){
    console.log(e.detail)
  }
})

运行结果:

4.6其他组件:

在小程序中,除了前面介绍的组件以外,map组件和canvas组件比较常用。


4.6.1map


map组件用于在页面中显示地图或路径,常用于LBS (基于位置服务)或路径指引,功能相对百度地图、高德地图较简单,目前具备绘制图标、路线、半径等能力,不能在cro11-viewswiper、picker-view,movable-view组件中使用。map组件的属性如表:

map组件的markers属性用于在地图上显示标记的位置,其相关属性如表所示:


map组件的polyline 属性用来指定一系列坐标点,从数组第一项连线到最后一项,形成一条路线,可以指定线的颜色、宽度、线型以及是否带箭头等,其相关属性如表所示:

代码:

//.wxml
<map id="map"
  longitude ="108.9200"
  latitude="34.1550"
  scale ="14"
  controls="{{controls}}"
  bindcontroltap="contro1tap"
  markers="{{markers}}"
  bindmarkertap="markertap"
  polyline="{{polyline}}"
  bindregionchange="regionchange"
  show-location
  style="width:100%;height:300;">
</map>
//.js
Page({
  data:{
    markers:[{
      iconPath:"../images/fuwu.png",
      id:0,
      longitude:"108.9290",
      latitude:"34.1480", 
      width:50,  
      height:50 
    }],
    polyline:[{
      points:[
        {
          longitude:"108.9200", 
      latitude:"34.1400",
        },
        {
          longitude:"108.9200", 
      latitude:"34.1500",
        },
        {
          longitude:"108.9200", 
      latitude:"34.1700",
        }
      ],
      color:"#00ff00", 
      width:2, 
      dottedLine:true 
    }],
    controls:[{
      id:1, 
      iconPath:'../images/lock.png',
      position: {
        left:0,
        top:300,
        width:30,
        height:30,
      },
      clickable:true
    }]
  },
  regionchange(e){
    console.log(e.type)
  },
  markertap(e) {
    console.log(e.markerId)
  },
  controltap(e){
    console.log(e.controlId)
  }
})

运行结果:

4.6.2canvas:

canvas组件用来绘制图形,相当于一块无色透明的普通图布。canvas组件本身并没有绘图能力,仅仅是图形容器,通过绘图API实现绘图功能。在默认情况下canvas组件的默认宽度为300px,高度为225 px,同一页面中的canvas -id不能重复,否则会出错。canvas组件的属性如表:

实现绘图需要3步:

(1) 创建一个canvas绘图上下文。

var context=wx:createCanvasContext(‘myCanvas‘)


(2) 使用canvas绘图上下文进行绘图描述。

ext.setFillstyle('green')
context.fillrect(10,10,200,100)


(3) 画图。

Context.draw()

代码:

//.wxml
<canvas canvas-id="myCanvas" style="border: 1px solid red;"></canvas>
//.js
Page({
  onLoad:function(options){
    var ctx =wx.createCanvasContext('myCanvas')
    ctx.setFillStyle('green')
    ctx.fillRect(10,10,200,100)
    ctx.draw()
  }
})

运行结果:

4.7本章小结:

         本章介绍了小程序中的常用组件,包括容器组件(view、scroll - view、 swiper)基础内容组件(icontext、progressrich-text)、表单组件(forminput、button、radio、check-boxlabel、picker、pickerviewslider、switchtextarea)多媒体组件(audio、imagevideocamera)、其他组件(map、canvas等)。熟练掌握这些组件的属性和方法是开发小程序的必备技能。


 

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 服务器控件概述及开发环境部署 .1 1.1 自定义服务器控件 1 1.2 服务器控件在软件开发过程中的作用 1 1.3 在控件开发中提升自己 2 1.4 可继承控件基类介绍 2 1.5 运行一个简单的控件 7 1.5.1 开发一个简单控件 7 1.5.2 部署和运行 11 1.6 控件生命周期 12 1.6.1 概述 12 1.6.2 用代码跟踪控件生命周期过程 14 1.7 本章总结 17 第2章 服务器控件开发中的调试技术 18 2.1 预置代码示例 18 2.2 调试页面服务端代码 19 2.3 服务器控件的调试 20 2.3.1 运行模式下的调试方法 20 2.3.2 设计模式下的调试方法 20 2.4 javascript脚本调试方法 22 2.4.1 调试页面中的javascript脚本(方法一) 22 .2.4.2 调试页面中的javascript脚本(方法二) 23 2.4.3 调试非嵌入式javascript脚本文件 23 2.4.4 调试嵌入式javascript脚本资源文件 24 2.4.5 高效率调试的技巧 24 2.5 ajax library对javascript调试支持 26 2.6 本章总结 26 第3章 从零开始开发服务器控件 27 3.1 选择基类 27 3.2 控件呈现顺序 28 3.3 render呈现控件的几种方式 30 3.3.1 使用htmltextwriter类输出 30 3.3.2 直接输出html标签 32 3.3.3 使用服务器控件的rendercontrol方法 33 3.4 addattributestorender方法 34 3.5 createchildcontrols方法 35 3.6 inamingcontainer接口 36 3.7 实现复合控件 38 3.7.1 createchildcontrols方法 39 3.7.2 childcontrolscreated属性 39 3.7.3 ensurechildcontrols方法 39 3.7.4 recreatechildcontrols方法 39 3.7.5 controls属性 40 3.7.6 hascontrols方法 40 3.7.7 hasevents方法 40 3.7.8 findcontrol方法 41 3.7.9 实现复合控件示例 41 3.8 常用开发技巧 51 3.8.1 designmode属性 51 3.8.2 屏蔽基类控件中的属性 52 3.8.3 page.request.browser属性 53 3.8.4 设置控件id规范 53 3.8.5 增强findcontrol功能 54 3.8.6 映射服务端控件值到客户端 55 3.8.7 禁止派生自compositecontrol的控件创建子控件 56 3.8.8 使用createchildcontrols的注意事项 56 3.8.9 不要误解设计元属性defaultvalue 57 3.8.10 在render方法中利用基类资源 57 3.8.11 条件编译&条件属性 60 3.9 本章总结 61 第4章 服务器控件属性 62 4.1 控件属性的作用 62 4.1.1 系统属性 62 4.1.2 自定义属性 62 4.2 简单属性 63 4.3 属性的设计时特性 64 4.4 复杂属性 67 4.4.1 概述 67 4.4.2 复杂属性的几种标记形式 67 4.4.3 深入研究——复杂属性分析器 79 4.5 深入研究——定制自己的属性编辑器 85 4.5.1 系统属性编辑器 85 4.5.2 定制属性编辑器 91 4.6 类型转换器 126 4.6.1 系统类型转换器 126 4.6.2 定制自己的类型转换器 128 4.7 实现自定义属性 138 4.8 本章总结 145 第5章 事件和数据回发机制 146 5.1 控件事件和数据回发概述 146 5.1.1 事件及其意义 146 5.1.2 数据回发机制 147 5.2 事件和数据回发机制的实现 148 5.2.1 客户端回传事件接口ipostbackeventhandler 148 5.2.2 客户端回发/回调揭密 150 5.2.3 回传数据处理接口ipostbackdatahandler 153 5.2.4 正确处理继承基类中控件的事件 159 5.2.5 扩展kingtextbox控件功能(kingtextboxcanpostevent控件) 161 5.3 复合控件的事件处理机制
基于STM32节点和阿里云IoT平台 的物联网应用开发 系列课程 第四章 服务端的应用开发 课程内容下载、观看 • 视频观看:AI电堂、阿里云大学IoT课堂 • 课件胶片下载:STMCU中文官网、阿里云大学IoT课堂 • 课件项目下载:STMCU中文官网、阿里云大学IoT课堂 2 STM32公众号 阿里云大学 电堂公众号STM 中文官网 第四章内容简介 • 第一节:综合软件架构介绍 • 软件架构,知识结构梳理 • 第二节:后端服务开发 • 后端框架,初始化首个后端项目,应用系统开发,部署 • 第三节:前端服务开发体验 • 前端框架,初始化首个前端项目,组件的使用和数据流转,部署 3 STM32-阿里云IoT 联合课件开发 第四章 . 第三节 前端服务开发 第四章.第三节 内容简介 • 前端基础概念和知识 • 认识前端框架 • 了解React • 学习Umi.js • 学习Ant Design • 了解dva.js • 初始化并运行第一个后端项目 • 安装yarn包管理工具 • 全局安装umi • 使用脚手架初始化 • Umi路由页面添加 5 • 创建和使用组件 • Layout组件 • 主页面创建 • 组件引入 • 组件完善 • 使用dva实现数据流转 • 数据请求 • Dva管理数据 • 应用调试与部署 • 项目打包 • 项目部署 了解前端基础概念和知识技能 • 前端的基本概念 6 在软体架构和程序设计领域,前端是软件系统中直接和用户交互的部分,而后端控制着软 件的输出。将软件分为前端和后端是一种将软件不同功能的部分相互分离的抽象
注意:由于文件大小为111MB,但本人的上传权限只有60MB,所以分开两部分压缩上传。解压前必须与part2一起解压。part2在本人的资源里可以找到:http://download.csdn.net/user/lxm0918 第1章 服务器控件概述及开发环境部署 .1 1.1 自定义服务器控件 1 1.2 服务器控件在软件开发过程中的作用 1 1.3 在控件开发中提升自己 2 1.4 可继承控件基类介绍 2 1.5 运行一个简单的控件 7 1.5.1 开发一个简单控件 7 1.5.2 部署和运行 11 1.6 控件生命周期 12 1.6.1 概述 12 1.6.2 用代码跟踪控件生命周期过程 14 1.7 本章总结 17 第2章 服务器控件开发中的调试技术 18 2.1 预置代码示例 18 2.2 调试页面服务端代码 19 2.3 服务器控件的调试 20 2.3.1 运行模式下的调试方法 20 2.3.2 设计模式下的调试方法 20 2.4 javascript脚本调试方法 22 2.4.1 调试页面中的javascript脚本(方法一) 22 .2.4.2 调试页面中的javascript脚本(方法二) 23 2.4.3 调试非嵌入式javascript脚本文件 23 2.4.4 调试嵌入式javascript脚本资源文件 24 2.4.5 高效率调试的技巧 24 2.5 ajax library对javascript调试支持 26 2.6 本章总结 26 第3章 从零开始开发服务器控件 27 3.1 选择基类 27 3.2 控件呈现顺序 28 3.3 render呈现控件的几种方式 30 3.3.1 使用htmltextwriter类输出 30 3.3.2 直接输出html标签 32 3.3.3 使用服务器控件的rendercontrol方法 33 3.4 addattributestorender方法 34 3.5 createchildcontrols方法 35 3.6 inamingcontainer接口 36 3.7 实现复合控件 38 3.7.1 createchildcontrols方法 39 3.7.2 childcontrolscreated属性 39 3.7.3 ensurechildcontrols方法 39 3.7.4 recreatechildcontrols方法 39 3.7.5 controls属性 40 3.7.6 hascontrols方法 40 3.7.7 hasevents方法 40 3.7.8 findcontrol方法 41 3.7.9 实现复合控件示例 41 3.8 常用开发技巧 51 3.8.1 designmode属性 51 3.8.2 屏蔽基类控件中的属性 52 3.8.3 page.request.browser属性 53 3.8.4 设置控件id规范 53 3.8.5 增强findcontrol功能 54 3.8.6 映射服务端控件值到客户端 55 3.8.7 禁止派生自compositecontrol的控件创建子控件 56 3.8.8 使用createchildcontrols的注意事项 56 3.8.9 不要误解设计元属性defaultvalue 57 3.8.10 在render方法中利用基类资源 57 3.8.11 条件编译&条件属性 60 3.9 本章总结 61 第4章 服务器控件属性 62 4.1 控件属性的作用 62 4.1.1 系统属性 62 4.1.2 自定义属性 62 4.2 简单属性 63 4.3 属性的设计时特性 64 4.4 复杂属性 67 4.4.1 概述 67 4.4.2 复杂属性的几种标记形式 67 4.4.3 深入研究——复杂属性分析器 79 4.5 深入研究——定制自己的属性编辑器 85 4.5.1 系统属性编辑器 85 4.5.2 定制属性编辑器 91 4.6 类型转换器 126 4.6.1 系统类型转换器 126 4.6.2 定制自己的类型转换器 128 4.7 实现自定义属性 138 4.8 本章总结 145 第5章 事件和数据回发机制 146 5.1 控件事件和数据回发概述 146 5.1.1 事件及其意义 146 5.1.2 数据回发机制 147 5.2 事件和数据回发机制的实现 148 5.2.1 客户端回传事件接口ipostbackeventhandler 148 5.2.2 客户端回发/回调揭密 150 5.2.3 回传数据处理接口ipostbackdatahandler 153 5.2.4 正确处理继承基类中控件的事件 159 5.2.5 扩展kingtextbox控件功能(kingtextboxcanpostevent控件) 161 5.3 复合控件的事件处理机制 168 5.3.1 高效率事件集合对象 168 5.3.2 定制自己的委托和事件参数类 170 5.3.3 复合控件的事件处理 175 5.3.4 自动完成功能控件searchcontrolintelligent 185 5.4 本章总结 193 第6章 页面状态机制 194 6.1 页面状态概述 194 6.2 视图状态机制 195 6.2.1 istatemanager接口 195 6.2.2 控件生命周期中的装载和保存视图阶段 196 6.2.3 简单类型视图状态应用 197 6.2.4 实现自定义类型视图状态 205 6.3 控件状态机制 217 6.4 视图状态和控件状态的关系 221 6.4.1 在禁用视图状态的情况下仍然使用viewstate对象 221 6.4.2 istatemanager接口仍然可以在控件状态中使用 223 6.4.3 视图状态和控件状态组合使用规则 225 6.5 加密页面状态 225 6.6 清除页面状态 226 6.7 对动态添加控件的视图状态分析 228 6.8 自定义类型转换器实现高效率序列化 231 6.9 页面状态性能优化策略 238 6.9.1 存储位置优化——把视图状态信息保存在服务端而非客户端 238 6.9.2 体积优化——压缩视图状态数据 240 6.9.3 分块存储视图状态数据 243 6.10 视图状态和控件状态的总结 243 6.11 本章总结 244 第7章 定制自定义控件主题样式 245 7.1 控件样式概述 245 7.2 asp.net对样式的支持 245 7.2.1 style类的工作原理及使用 245 7.2.2 webcontrol基类对样式的支持功能及其工作原理 249 7.2.3 htmltextwriter类对控件样式的支持 252 7.2.4 定义控件内部的样式属性规则 253 7.2.5 两个常用转换方法 256 7.3 应用示例 260 7.3.1 复合控件样式及视图状态 260 7.3.2 控件结构与样式分离方案 268 7.4 本章总结 295 第8章 控件客户端编程模型 297 8.1 asp.net服务端控件对客户端的支持 297 8.2 clientscriptmanager类功能详解 301 8.2.1 registerarraydeclaration方法 301 8.2.2 registerclientscriptblock方法 302 8.2.3 registerclientscriptinclude方法 303 8.2.4 registerclientscriptresource方法 304 8.2.5 registerstartupscript方法 305 8.2.6 registerexpandoattribute方法 305 8.2.7 registerhiddenfield方法 306 8.2.8 getcallbackeventreference方法 307 8.2.9 getpostbackclienthyperlink方法 307 8.2.10 getpostbackeventreference方法 308 8.2.11 getwebresourceurl方法 308 8.2.12 registeronsubmitstatement方法 309 8.3 客户端回调 309 8.4 客户端控件应用示例 323 8.4.1 封装js客户端对象 323 8.4.2 封装htc客户端对象 343 8.4.3 在线签名控件示例应用 371 8.5 常用的一些javascript框架 385 8.6 本章总结 387 第9章 定制用户控件 388 9.1 用户控件概述 388 9.1.1 用户控件的作用.. 388 9.1.2 了解system.web.ui.usercontrol基类 388 9.2 用户控件应用示例 389 9.2.1 简单用户控件 389 9.2.2 复杂数据绑定用户控件 394 9.3 用户控件缓存 419 9.3.1 asp.net缓存介绍 419 9.3.2 用户控件缓存 420 9.4 本章总结 421 第10章 开发验证控件 422 10.1 验证控件的工作原理 422 10.1.1 内置验证控件简述 422 10.1.2 验证控件的工作机制解析 423 10.2 实现自定义验证控件 443 10.3 本章总结 451 第11章 在控件中使用嵌入资源 452 11.1 在控件中嵌入资源的原理 452 11.2 在控件中应用嵌入资源 453 11.2.1 在控件中使用嵌入资源 453 11.2.2 常用嵌入资源类型及用法 455 11.3 浏览器常用工具 460 11.3.1 httpwatch 460 11.3.2 ie develper toolbar 461 11.3.3 fiddler 461 11.4 本章总结 462 第12章 开发模板数据绑定控件 463 12.1 asp.net模板属性控件机制 463 12.1.1 模板属性介绍 463 12.1.2 asp.net对模板控件的支持 464 12.1.3 repeater控件模板实现机制解析 466 12.2 自定义控件应用示例 469 12.2.1 模板控件功能 469 12.2.2 应用示例 470 12.3 本章总结 489 第13章 数据绑定和数据源控件 490 13.1 数据绑定控件 490 13.1.1 数据绑定控件概述 490 13.1.2 asp.net对数据绑定控件的支持 491 13.2 数据绑定控件示例应用 501 13.2.1 控件实现功能 501 13.2.2 应用示例 502 13.3 数据源控件 508 13.3.1 数据源控件概述 508 13.3.2 asp.net对数据源控件的支持 508 13.4 数据源控件示例应用 515 13.4.1 控件实现功能 515 13.4.2 应用示例 516 13.5 本章总结 522 第14章 扩展控件方案——gridview 523 14.1 扩展控件概述 523 14.2 任意定制gridview多表头 523 14.2.1 功能概述 523 14.2.2 代码实现 524 14.3 固定gridview表头并增加滚动条支持 527 14.3.1 功能概述 527 14.3.2 代码实现 528 14.4 本章总结 533 第15章 自定义控件设计模式下编程汇总 534 15.1 .net框架对设计时支持 534 15.2 设计时元数据支持 535 15.3 复杂属性序列化 539 15.4 类型转换器 539 15.5 属性编辑器 540 15.6 设计模式可用基类介绍 541 15.7 设计时对控件呈现的支持 543 15.7.1 概述 543 15.7.2 应用示例 543 15.8 自动套用格式 546 15.8.1 概述 546 15.8.2 应用示例 547 15.9 模板ui设计器 551 15.10 智能操作列表 552 15.10.1 概述 552 15.10.2 应用示例 552 15.11 控件设计器区域 558 15.11.1 概述 558 15.11.2 应用示例 558 15.12 本章总结 562 第16章 asp.net ajax控件开发——客户端 563 16.1 asp.net ajax框架概述 563 16.2 ajax library对客户端面向对象功能支持 564 16.2.1 命名空间及type和function类 565 16.2.2 接口类型 568 16.2.3 类类型以及面向对象继承特征 569 16.2.4 枚举类型 570 16.2.5 反射功能 570 16.3 ajax library中的常用类型 571 16.3.1 ajax library对javascript基类型的扩展 571 16.3.2 sys.stringbuilder类 576 16.4 ajax library请求服务端和webservices 577 16.4.1 sys.net命名空间中的类 577 16.4.2 请求过程解析 578 16.4.3 webrequest请求示例 579 16.4.4 使用代理实现ajax调用服务端示例 581 16.5 ajax library对控件客户端类开发的支持 584 16.5.1 客户端控件基成员(类/接口) 584 16.5.2 asp.net ajax控件客户端生命周期 589 16.6 客户端控件示例应用 592 16.7 调试和跟踪 603 16.8 本章总结 605 第17章 asp.net ajax控件开发——服务端 606 17.1 asp.net ajax服务器控件概述 606 17.2 ajax服务器控件 607 17.2.1 ajax服务器控件 607 17.2.2 asp.net ajax扩展程序控件 612 17.3 asp.net ajax对服务器控件支持的基类 612 17.3.1 ajax控件支持的基类 612 17.3.2 ajax控件应用示例 623 17.4 本章总结 636 附录a .net 3.5技术教程系列——collection/asp.net ajax/ silverlight/jquery ...646
注意:由于文件大小为111MB,但本人的上传权限只有60MB,所以分开两部分压缩上传。解压前必须与part2一起解压。part2在本人的资源里可以找到:http://download.csdn.net/user/lxm0918 第1章 服务器控件概述及开发环境部署 .1 1.1 自定义服务器控件 1 1.2 服务器控件在软件开发过程中的作用 1 1.3 在控件开发中提升自己 2 1.4 可继承控件基类介绍 2 1.5 运行一个简单的控件 7 1.5.1 开发一个简单控件 7 1.5.2 部署和运行 11 1.6 控件生命周期 12 1.6.1 概述 12 1.6.2 用代码跟踪控件生命周期过程 14 1.7 本章总结 17 第2章 服务器控件开发中的调试技术 18 2.1 预置代码示例 18 2.2 调试页面服务端代码 19 2.3 服务器控件的调试 20 2.3.1 运行模式下的调试方法 20 2.3.2 设计模式下的调试方法 20 2.4 javascript脚本调试方法 22 2.4.1 调试页面中的javascript脚本(方法一) 22 .2.4.2 调试页面中的javascript脚本(方法二) 23 2.4.3 调试非嵌入式javascript脚本文件 23 2.4.4 调试嵌入式javascript脚本资源文件 24 2.4.5 高效率调试的技巧 24 2.5 ajax library对javascript调试支持 26 2.6 本章总结 26 第3章 从零开始开发服务器控件 27 3.1 选择基类 27 3.2 控件呈现顺序 28 3.3 render呈现控件的几种方式 30 3.3.1 使用htmltextwriter类输出 30 3.3.2 直接输出html标签 32 3.3.3 使用服务器控件的rendercontrol方法 33 3.4 addattributestorender方法 34 3.5 createchildcontrols方法 35 3.6 inamingcontainer接口 36 3.7 实现复合控件 38 3.7.1 createchildcontrols方法 39 3.7.2 childcontrolscreated属性 39 3.7.3 ensurechildcontrols方法 39 3.7.4 recreatechildcontrols方法 39 3.7.5 controls属性 40 3.7.6 hascontrols方法 40 3.7.7 hasevents方法 40 3.7.8 findcontrol方法 41 3.7.9 实现复合控件示例 41 3.8 常用开发技巧 51 3.8.1 designmode属性 51 3.8.2 屏蔽基类控件中的属性 52 3.8.3 page.request.browser属性 53 3.8.4 设置控件id规范 53 3.8.5 增强findcontrol功能 54 3.8.6 映射服务端控件值到客户端 55 3.8.7 禁止派生自compositecontrol的控件创建子控件 56 3.8.8 使用createchildcontrols的注意事项 56 3.8.9 不要误解设计元属性defaultvalue 57 3.8.10 在render方法中利用基类资源 57 3.8.11 条件编译&条件属性 60 3.9 本章总结 61 第4章 服务器控件属性 62 4.1 控件属性的作用 62 4.1.1 系统属性 62 4.1.2 自定义属性 62 4.2 简单属性 63 4.3 属性的设计时特性 64 4.4 复杂属性 67 4.4.1 概述 67 4.4.2 复杂属性的几种标记形式 67 4.4.3 深入研究——复杂属性分析器 79 4.5 深入研究——定制自己的属性编辑器 85 4.5.1 系统属性编辑器 85 4.5.2 定制属性编辑器 91 4.6 类型转换器 126 4.6.1 系统类型转换器 126 4.6.2 定制自己的类型转换器 128 4.7 实现自定义属性 138 4.8 本章总结 145 第5章 事件和数据回发机制 146 5.1 控件事件和数据回发概述 146 5.1.1 事件及其意义 146 5.1.2 数据回发机制 147 5.2 事件和数据回发机制的实现 148 5.2.1 客户端回传事件接口ipostbackeventhandler 148 5.2.2 客户端回发/回调揭密 150 5.2.3 回传数据处理接口ipostbackdatahandler 153 5.2.4 正确处理继承基类中控件的事件 159 5.2.5 扩展kingtextbox控件功能(kingtextboxcanpostevent控件) 161 5.3 复合控件的事件处理机制 168 5.3.1 高效率事件集合对象 168 5.3.2 定制自己的委托和事件参数类 170 5.3.3 复合控件的事件处理 175 5.3.4 自动完成功能控件searchcontrolintelligent 185 5.4 本章总结 193 第6章 页面状态机制 194 6.1 页面状态概述 194 6.2 视图状态机制 195 6.2.1 istatemanager接口 195 6.2.2 控件生命周期中的装载和保存视图阶段 196 6.2.3 简单类型视图状态应用 197 6.2.4 实现自定义类型视图状态 205 6.3 控件状态机制 217 6.4 视图状态和控件状态的关系 221 6.4.1 在禁用视图状态的情况下仍然使用viewstate对象 221 6.4.2 istatemanager接口仍然可以在控件状态中使用 223 6.4.3 视图状态和控件状态组合使用规则 225 6.5 加密页面状态 225 6.6 清除页面状态 226 6.7 对动态添加控件的视图状态分析 228 6.8 自定义类型转换器实现高效率序列化 231 6.9 页面状态性能优化策略 238 6.9.1 存储位置优化——把视图状态信息保存在服务端而非客户端 238 6.9.2 体积优化——压缩视图状态数据 240 6.9.3 分块存储视图状态数据 243 6.10 视图状态和控件状态的总结 243 6.11 本章总结 244 第7章 定制自定义控件主题样式 245 7.1 控件样式概述 245 7.2 asp.net对样式的支持 245 7.2.1 style类的工作原理及使用 245 7.2.2 webcontrol基类对样式的支持功能及其工作原理 249 7.2.3 htmltextwriter类对控件样式的支持 252 7.2.4 定义控件内部的样式属性规则 253 7.2.5 两个常用转换方法 256 7.3 应用示例 260 7.3.1 复合控件样式及视图状态 260 7.3.2 控件结构与样式分离方案 268 7.4 本章总结 295 第8章 控件客户端编程模型 297 8.1 asp.net服务端控件对客户端的支持 297 8.2 clientscriptmanager类功能详解 301 8.2.1 registerarraydeclaration方法 301 8.2.2 registerclientscriptblock方法 302 8.2.3 registerclientscriptinclude方法 303 8.2.4 registerclientscriptresource方法 304 8.2.5 registerstartupscript方法 305 8.2.6 registerexpandoattribute方法 305 8.2.7 registerhiddenfield方法 306 8.2.8 getcallbackeventreference方法 307 8.2.9 getpostbackclienthyperlink方法 307 8.2.10 getpostbackeventreference方法 308 8.2.11 getwebresourceurl方法 308 8.2.12 registeronsubmitstatement方法 309 8.3 客户端回调 309 8.4 客户端控件应用示例 323 8.4.1 封装js客户端对象 323 8.4.2 封装htc客户端对象 343 8.4.3 在线签名控件示例应用 371 8.5 常用的一些javascript框架 385 8.6 本章总结 387 第9章 定制用户控件 388 9.1 用户控件概述 388 9.1.1 用户控件的作用.. 388 9.1.2 了解system.web.ui.usercontrol基类 388 9.2 用户控件应用示例 389 9.2.1 简单用户控件 389 9.2.2 复杂数据绑定用户控件 394 9.3 用户控件缓存 419 9.3.1 asp.net缓存介绍 419 9.3.2 用户控件缓存 420 9.4 本章总结 421 第10章 开发验证控件 422 10.1 验证控件的工作原理 422 10.1.1 内置验证控件简述 422 10.1.2 验证控件的工作机制解析 423 10.2 实现自定义验证控件 443 10.3 本章总结 451 第11章 在控件中使用嵌入资源 452 11.1 在控件中嵌入资源的原理 452 11.2 在控件中应用嵌入资源 453 11.2.1 在控件中使用嵌入资源 453 11.2.2 常用嵌入资源类型及用法 455 11.3 浏览器常用工具 460 11.3.1 httpwatch 460 11.3.2 ie develper toolbar 461 11.3.3 fiddler 461 11.4 本章总结 462 第12章 开发模板数据绑定控件 463 12.1 asp.net模板属性控件机制 463 12.1.1 模板属性介绍 463 12.1.2 asp.net对模板控件的支持 464 12.1.3 repeater控件模板实现机制解析 466 12.2 自定义控件应用示例 469 12.2.1 模板控件功能 469 12.2.2 应用示例 470 12.3 本章总结 489 第13章 数据绑定和数据源控件 490 13.1 数据绑定控件 490 13.1.1 数据绑定控件概述 490 13.1.2 asp.net对数据绑定控件的支持 491 13.2 数据绑定控件示例应用 501 13.2.1 控件实现功能 501 13.2.2 应用示例 502 13.3 数据源控件 508 13.3.1 数据源控件概述 508 13.3.2 asp.net对数据源控件的支持 508 13.4 数据源控件示例应用 515 13.4.1 控件实现功能 515 13.4.2 应用示例 516 13.5 本章总结 522 第14章 扩展控件方案——gridview 523 14.1 扩展控件概述 523 14.2 任意定制gridview多表头 523 14.2.1 功能概述 523 14.2.2 代码实现 524 14.3 固定gridview表头并增加滚动条支持 527 14.3.1 功能概述 527 14.3.2 代码实现 528 14.4 本章总结 533 第15章 自定义控件设计模式下编程汇总 534 15.1 .net框架对设计时支持 534 15.2 设计时元数据支持 535 15.3 复杂属性序列化 539 15.4 类型转换器 539 15.5 属性编辑器 540 15.6 设计模式可用基类介绍 541 15.7 设计时对控件呈现的支持 543 15.7.1 概述 543 15.7.2 应用示例 543 15.8 自动套用格式 546 15.8.1 概述 546 15.8.2 应用示例 547 15.9 模板ui设计器 551 15.10 智能操作列表 552 15.10.1 概述 552 15.10.2 应用示例 552 15.11 控件设计器区域 558 15.11.1 概述 558 15.11.2 应用示例 558 15.12 本章总结 562 第16章 asp.net ajax控件开发——客户端 563 16.1 asp.net ajax框架概述 563 16.2 ajax library对客户端面向对象功能支持 564 16.2.1 命名空间及type和function类 565 16.2.2 接口类型 568 16.2.3 类类型以及面向对象继承特征 569 16.2.4 枚举类型 570 16.2.5 反射功能 570 16.3 ajax library中的常用类型 571 16.3.1 ajax library对javascript基类型的扩展 571 16.3.2 sys.stringbuilder类 576 16.4 ajax library请求服务端和webservices 577 16.4.1 sys.net命名空间中的类 577 16.4.2 请求过程解析 578 16.4.3 webrequest请求示例 579 16.4.4 使用代理实现ajax调用服务端示例 581 16.5 ajax library对控件客户端类开发的支持 584 16.5.1 客户端控件基成员(类/接口) 584 16.5.2 asp.net ajax控件客户端生命周期 589 16.6 客户端控件示例应用 592 16.7 调试和跟踪 603 16.8 本章总结 605 第17章 asp.net ajax控件开发——服务端 606 17.1 asp.net ajax服务器控件概述 606 17.2 ajax服务器控件 607 17.2.1 ajax服务器控件 607 17.2.2 asp.net ajax扩展程序控件 612 17.3 asp.net ajax对服务器控件支持的基类 612 17.3.1 ajax控件支持的基类 612 17.3.2 ajax控件应用示例 623 17.4 本章总结 636 附录a .net 3.5技术教程系列——collection/asp.net ajax/ silverlight/jquery ...646
深入解析Windows操作系统 4/5 第1章 概念和工具 1.1 Windows操作系统的版本 1.2 基础概念和术语 1.3 挖掘Windows内部机理 1.4 本章总结 第2章 系统结构 2.1 需求和设计目标 2.2 操作系统模型 2.3 总体结构 2.4 关键的系统组件 2.5 本章总结 第3章 系统机制 3.1 陷阱分发 3.2 对象管理器 3.3 同步 3.4 系统辅助线程 3.5 Windows全局标志 3.6 本地过程调用(LPC) 3.7 内核事件追踪 3.8 Wow64 3.9 本章总结 第4章 管理机制 4.1 注册表 4.2 服务 4.3 Windows管理规范 4.4 本章总结 第5章 启动和停机 5.1 引导过程 5.2 引导和启动问题的故障检查 5.3 停机 5.4 本章总结 第6章 进程、线程和作业 6.1 进程的内部机理 6.2 CreateProcess的流程 6.3 线程的内部机理 6.4 检查线程活动 6.5 线程调度 6.6 作业对象 6.7 本章总结 第7章 内存管理 7.1 内存管理器简介 7.2 内存管理器提供的服务 7.3 系统内存池 7.4 虚拟地址空间的布局结构 7.5 地址转译 7.6 页面错误处理 7.7 虚拟地址描述符 7.8 内存区对象 7.9 工作集 7.10 逻辑预取器 7.11 页面帧编号数据库 7.12 本章总结 第8章 安全性 8.1 安全系统组件 8.2 保护对象 8.3 账户权限和特权 8.4 安全审计 8.5 登录(Logon) 8.6 软件限制策略 8.7 本章总结 第9章 I/O系统 9.1 I/O系统组件 9.2 设备驱动程序 9.3 I/O处理 9.4 即插即用(PnP)管理器 9.5 电源管理器 9.6 本章总结 第10章 存储管理 10.1 有关存储的术语 10.2 磁盘驱动程序 10.3 卷的管理 10.4 本章总结 第11章 缓存管理器 11.1 缓存管理器的关键特性 11.2 缓存的虚拟内存管理 11.3 缓存的大小 11.4 缓存的数据结构 11.5 文件系统接口 11.6 快速I/O 11.7 预读(Read Ahead)和滞后写(Write Behind) 11.8 本章总结 第12章 文件系统 12.1 Windows文件系统格式 12.2 文件系统驱动程序总体结构 12.3 诊断文件系统的问题 12.5 NTFS文件系统驱动程序 12.6 NTFS在磁盘上的结构 12.7 NTFS的恢复支持 12.8 加密文件系统(EFS)安全性 12.9 本章总结 第13章 网络 13.1 Windows的网络总体结构 13.2 网络API 13.3 多重定向器支持 13.4 名称解析 13.5 协议驱动程序 13.6 NDIS驱动程序 13.7 绑定 13.8 分层的网络服务 13.9 本章总结 第14章 崩溃转储分析 14.1 Windows为什么会崩溃 14.2 蓝屏 14.3 崩溃转储文件 14.4 Windows错误报告 14.5 在线崩溃分析 14.6 基本的崩溃转储分析 14.7 使用崩溃诊断工具 14.8 高级的崩溃转储分析 术语表 术语对照表 索引

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值