小程序:WXML語法(數據綁定、列表渲染、條件渲染、九九乘法表、導航條)


1、數據綁定

小程序的數據綁定放棄了DOM結構,不用像html那樣先獲取DOM,然后再賦值給標簽。小程序的數據綁定是單向的(從邏輯層(js)到UI層)

(1)簡單綁定:

 data: {
      msg: 'hello!'
    }
<view>{{msg}}</view>

 (2)運算

<view>{{a+b+c}}</view>
  data: {
    a: 1,
    b: 2,
    c: 3
  }

 (3)數組

<view wx:for="{{[a,b,c, 1, 2, 3, 4]}}"> {{item}} </view>
  data: {
    a: 1,
    b: 2,
    c: 3
  }

 (4)組件的屬性

初始化顏色的值並在屬性中獲取該值作為屬性的值:

  data: {
  num:5,
    color:"red"
  },
<view style="color:{{color}}">nihao</view>

(5)修改data屬性的值的方法(不能采用傳統的等號的賦值方法)

<view style="color:{{color}}">nihao</view>
<button bindtap="changecolor">點擊變色</button>
  changecolor(){
this.setData({
  color:'yellow'
})
  },

data的原始color值為red,這里點擊按鈕的時候調用函數,將顏色修改為了yellow

  data: {
  num:5,
    color:"red"
  },

點擊按鈕前:

 點擊按鈕后:

 (6)數組、對象

  data: {
    object: {
      key: 'Hello '
    },
    array: ['MINA','TOM']
  },
<view>{{object.key}} {{array[1]}}</view>

對象是以屬性名和屬性值的形式存儲,可以用屬性名獲取值

數組可以通過下標獲取數組的相應位置的值

 

2、列表渲染

(1)微信小程序中的for循環

<view wx:for="{{4}}">晚上好</view>

(2)for循環遍歷數組

定義數組:

  data: {
 arr:[1,2,3,4]
  }

綁定數組顯示數組的數據:

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

item:當前值

index:當前值的下標

(3)循環的優化(block標簽的應用)

VIEW方式:

定義數組:

 data: {
    array: ['MINA','TOM','xiaoming']
  },

綁定數組,顯示數據:

<view wx:for="{{array}}">
<view>{{item}}------{{index}}</view>
</view>

 

 

查看頁面元素,有多余的view:

BLOCK方式:

<block wx:for="{{array}}">
<view>{{item}}------{{index}}</view>
</block>

查看頁面元素已經沒有多余的view標簽了:

 

 

 (4)wx:key(唯一標識符,可以提高列表渲染的效率)

<block wx:for="{{array}}" wx:key="index">
<view>{{item}}------{{index}}</view>
</block>

 

3、條件渲染

數據:

  data: {
  num:5
  }

對數據進行判斷(符合相應的條件才去渲染):

<view wx:if="{{num > 5}}"> num大於5 </view>
<view wx:elif="{{num < 5}}"> num小於5 </view>
<view wx:else> num等於5 </view>

結果:

 

4、練習(九九乘法表)

准備數據:

  data: {
    number:[1,2,3,4,5,6,7,8,9]
  },

運用循環的嵌套取出數據完成乘法表的顯示:

<view wx:for="{{number}}" wx:for-item="i"  class="row"><!--外層循環i,內層循環j小於等於i-->
   <view wx:for="{{number}}" wx:for-item="j"  wx:if="{{j<=i}}" class="col">
   {{i}}*{{j}}={{i*j}}
   </view>
</view>

樣式:

.row{
  display:flex;
  justify-content: flex-start;
  font-size: 8px;
  
  }
  .col{
  width: 11.1111%;
  }

測試結果:

 

5、練習(導航條)

(1)初始化數據:

前面的一個數組存儲的是對象,作為導航欄的信息,后面的一個數組存儲的是文本信息

 data: {
    t:[{
           name:"全部",
           sub:1
         },
         {
          name:"精華",
          sub:2
        },
        {
          name:"分享",
          sub:3
        },
        {
          name:"問答",
          sub:4
        },
        {
          name:"招聘",
          sub:5
        }
       ],
      arr :['《將進酒·君不見黃河之水天上來》',
            ' 君不見黃河之水天上來,奔流到海不復回',
            ' 君不見高堂明鏡悲白發,朝如青絲暮成雪。',
            '人生得意須盡歡,莫使金樽空對月。',
            '天生我材必有用,千金散盡還復來。',
            '烹羊宰牛且為樂,會須一飲三百杯。',
            '岑夫子,丹丘生,將進酒,杯莫停。',
            '與君歌一曲,請君為我傾耳聽。',
            '鍾鼓饌玉不足貴,但願長醉不復醒。',
            '古來聖賢皆寂寞,惟有飲者留其名。',
            '陳王昔時宴平樂,斗酒十千恣歡謔。',
            '主人何為言少錢,徑須沽取對君酌。',
            '五花馬,千金裘,',
            '呼兒將出換美酒,與爾同銷萬古愁。'
          ],
       currentIndex:1
  },

判斷點擊位置的函數:

  tabchange(e){
   this.setData({
    currentIndex:e.currentTarget.dataset.num
})
},

(2)界面

先通過列表渲染展示導航條的數據,通過判斷當前點擊的位置來顯示不同的樣式,如果某一處被點擊了,就用tab 和current樣式,否則只用tab,這里用三目運算符來處理

下面的一個view通過列表渲染完成數據的顯示

<view clsss="main">
    <view class="header">
        <block wx:for="{{t}}">
        <view class="tab {{currentIndex==item.sub ? 'current':''}}" bindtap="tabchange" data-num="{{item.sub}}">{{item.name}}</view>
        </block>
    </view>
</view>


    <view wx:for="{{arr}}" class="poetry">
     {{item}}
    </view>

(3)頁面樣式

.tab{
  font-size: 32rpx ;
  color:#86C811 ;
}
.current{
  color:#fff;
  background-color:#86C811;
  padding:6rpx 8rpx;
}
.main{
  width:95%;
  background-color:■#fff;
  margin:40rpx auto;
  border-radius:6rpx 6rpx 0 0;
  font-size:28rpx;
}
.header{
  width:100%;
  height:120rpx;
  background-color:#F6F6F6;
  display:flex;
  align-items:center;
  justify-content:space-around;
  font-size:32rpx;
}
.poetry{
  font-size: 30rpx;
  background-color: #EDEFF0;
}

(4)測試結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM