Weex語法——顯示邏輯控制器

Weex前端語義支持通過兩種特殊屬性(if和repeat)的設(shè)置來確定組件的顯示狀態(tài),這會使得整個頁面布局顯得更加靈活。

if

通過設(shè)置if屬性值,可以控制當前組件節(jié)點的顯示狀態(tài)。如果設(shè)為true,則會將當前節(jié)點置于DOM中渲染,反之則會從DOM中移除。

<template>
    <container>
        <text onclick="toggle">Toggle</text>
        <image src="..." if="{{shown}}"></image>
    </container>
    </template>
 
    <script>
        module.exports = {
        data: {
            shown: true
        },
        methods: {
        toggle: function () {
            this.shown = !this.shown
        }
        }
    }
    </script>

repeat

repeat屬性用于控制具有相同樣式或?qū)傩缘慕M件節(jié)點做重復渲染。它綁定的數(shù)據(jù)類型必須為數(shù)組,其中每個數(shù)組項的屬性會分別綁定到需要重復渲染的各子組件上。

 <template>
    <container>
        <container repeat="{{list}}" class="{{gender}}">
            <image src="{{avatar}}"></image>
            <text>{{nickname}}</text>
        </container>
    </container>
    </template>
 
    <style>
    .male {...}
    .female {...}
    </style>
 
    <script>
    module.exports = {
        data: {
            list: [
            {gender: 'male', nickname: 'Li Lei', avatar: '...'},
            {gender: 'female', nickname: 'Han Meimei', avatar: '...'},
         ...
        ]
     }
    }
</script>

此外,weex同樣支持不在repeat數(shù)組中的數(shù)據(jù)綁定到重復渲染的組件節(jié)點上。

<template>
    <container>
        <container repeat="{{list}}" class="{{gender}}">
        <image src="{{avatar}}"></image>
        <text>{{nickname}} - {{group}}</text>
        </container>
    </container>
    </template>
 
    <style>
    .male {...}
    .female {...}
    </style>
 
    <script>
    module.exports = {
        data: {
            group: '...',
             list: [
                {gender: 'male', nickname: 'Li Lei', avatar: '...'},
                {gender: 'female', nickname: 'Han Meimei', avatar: '...'},
                 ...
            ]
        }
    }
    </script>

repeat屬性擴展

使用 $index 獲取當前節(jié)點所綁定的數(shù)據(jù)在repeat數(shù)組中的索引值.
例如:

 <div repeat="{{list}}">
        <text>No. {{$index + 1}}</text>
    <div>

獲取repeat數(shù)組的屬性值.
例如:

<div repeat="{{v in list}}">
        <text>
              No. {{$index + 1}}, {{v.nickname}}
        </text>
 </div>

<div repeat="{{(k, v) in list}}">
      <text>No. {{k + 1}}, {{v.nickname}}</text>
    </div>

使用 track-by 追蹤特殊的屬性
通常情況下,當更新repeat數(shù)組時,所有數(shù)組元素關(guān)聯(lián)的組件節(jié)點都會被重新渲染。如果其中部分節(jié)點的數(shù)據(jù)在更新前后未發(fā)生變更,那么最好是讓這些節(jié)點保持原樣,僅更新數(shù)據(jù)有變化的節(jié)點,weex提供了track-by屬性能幫您輕松搞定。
注意: track-by屬性的設(shè)置不支持數(shù)據(jù)綁定的方式

<template>
    <container>
        <container repeat="{{list}}" track-by="nickname" class="{{gender}}">
            <image src="{{avatar}}"></image>
            <text>{{nickname}} - {{group}}</text>
        </container>
    </container>
    </template>

如前所述,當更新repeat數(shù)組時,如果檢測到屬性nickname的值前后一致,那么它所綁定的子節(jié)點將不被重新渲染。

簡化寫法

對于if和repeat的使用,可以簡化處理,即if="show"和if="{{show}}"所表達的前端語義相同。

<template>
    <container>
        <text if="shown">Hello</text>
        <text if="{{shown}}">Hello</text>
    </container>
    </template>
 
    <script>
        module.exports = {
        data: function () {return {shown: true}}
    }
    </script>

很顯然,這兩個text文本會被同時顯示出來。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容,還有我對于 Vue 1.0 印象不深的內(nèi)容。關(guān)于...
    云之外閱讀 5,180評論 0 29
  • 前言 Weex為了提高Native的極致性能,做了很多優(yōu)化的工作 為了達到所有頁面在用戶端達到秒開,也就是網(wǎng)絡(J...
    一縷殤流化隱半邊冰霜閱讀 13,528評論 11 73
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,653評論 19 139
  • Vue 實例 屬性和方法 每個 Vue 實例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,374評論 0 6
  • 每一次的屈服, 都是對真心的羞辱 每一次明白, 都要經(jīng)受深深的痛楚。
    再湊熱鬧閱讀 182評論 0 0

友情鏈接更多精彩內(nèi)容