原生JS 批量渲染 Json數組對象列表數據(基於vue:v-for渲染列表數據原理的思考)

Vuejs的出現減輕了對DOM的直接操作,同時它提供的 v-for 渲染列表數據也給我們提供了很大的方便。即使是複雜的 Json數組對象,也可以使用 多層嵌套的 v-for 實現,格式如下:

<div v-for="(item,index) in items">

    <div v-for="(list,index) in item.lists"></div>

<div>

假設當前的HTML,VUE 文本格式如下:

<div id="app" class="columns">
    <div class="column">
        <div class="card">
            <div class="card-content">
                <div id="data" class="columns is-multiline ">
                    <div class="column is-half">
                        <div class="media">
                            <div class="media-content">
                                <p class="has-text-weight-bold">職業知識</p>
                                <p class="help">生涯樹提供的職業數據框架,可以從職業能力、知識、技能、活動、內容方面進行探索和規劃</p>
                            </div>
                        </div>
                        <div class="message-body">
                            <div class="field buttons">
                                <a>興趣:</a>
                                <span>常見的任務和環境的偏好</span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

需要渲染的JSON數組對象格式如下:

var allData = [
    {
        "id":"職業知識",
        "name":"關於各行業職業信息的分析,主要因素分析",
        "lists":[
            {
                "title":"興趣",
                "describe":"常見的任務和環境的偏好"
            },
            {
                "title":"價值觀",
                "describe":"個人滿意度的關鍵方面"
            },
            {
                "title":"技能",
                "describe":"學習發展、組織協作和資源管理的發達能力"
            }
        ]
    },
    {
        "id":"職業擴展",
        "name":"提供除本職業之外的擴展知識等各個方面",
        "lists":[
            {
                "title":"活動",
                "describe":"常見的工作行爲類型"
            },
            {
                "title":"內容",
                "describe":"工作性質的物理和社會因素"
            },
            {
                "title":"能力",
                "describe":"個人基本持久屬性"
            }
        ]
    }
];

使用VUE操作渲染列表,先對文本分配對應的字段值,格式如下:

<div class="column is-half"  v-for="(item, index) in items">
    <div class="media">
        <div class="media-content">
            <p class="has-text-weight-bold">{{ item.id }}</p>
            <p class="help">{{ item.name }}</p>
        </div>
    </div>
    <div class="message-body" v-for="(list, index) in item.lists">
        <div class="field buttons"  >
            <a>{{ list.title}}:</a>
            <span>{{ list.describe}}</span>
        </div>
    </div>
</div>

JS操作,引入 vuejs,創建實例渲染到指定對象(引入鏈接請移步到官網 https://cn.vuejs.org/)

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
var vm = new Vue({ el: '#app', data: { items:allData }})

VUE渲染列表數據完成,就是這麼簡單。接下來看看 原生JS 是如何渲染列表數據的:

原生JS操作數組取值:循環。使用 for in 直接操作對象,或者 for循環直接取值,格式如下:

for(var key in values){};for(var i=0;i<values.length;i++){},根據情況取任意一種方式,以爲演示兩種方式的使用

function  Id(id) {
    return document.getElementById(id);  //獲取模塊的ID
}
function  getData(allData) {
    var data = Id("data");
    var html='';
    for(var i in allData){  //外層循環獲取標誌信息
        var list = '';
        for(var j=0;j<allData[i].lists.length;j++){ //內層循環渲染詳細列表項
            list+='<div class="message-body">'+
                    '<div class="field buttons">'+
                        '<a class=" ">'+allData[i].lists[j].title+':</a>'+
                        '<span>'+allData[i].lists[j].describe+'</span>'+
                    '</div>'+
                '</div>';
        }
        html+='<div class="column is-half">'+
                '<div class="media">'+
                    '<div class="media-content">'+
                    '<p class="has-text-weight-bold">'+allData[i].id+'</p>'+
                    '<p class="help">'+allData[i].name+'</p>'+
                    '</div>'+
                '</div>'+list+   //將內層渲染好的列表項模塊添加到外層大模塊中
            '</div>';
    }
    data.innerHTML = html;  //像指定的ID模塊追加內容
}
//調用渲染數據方法並傳遞參數 JSON數組對象
getData(allData);

最終,VUE ,原生JS 渲染出來的列表數據效果均如下:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章