1. 程式人生 > >vue+element的tree元件學習模板

vue+element的tree元件學習模板

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    </head>
    <body>
        <div id="app">
             <el-tree
v-loading="loading" style="width: 400px;" ref="tree" :props="defaultProps" :load="loadNode" :data="items" node-key="id" :expand-on-click-node="false" lazy :check-strictly="true" @check-change
="checkChange" show-checkbox>
</el-tree> </div> </body> <script src="https://unpkg.com/vue/dist/vue.js"></script> <script src="https://unpkg.com/element-ui/lib/index.js"></script> <script type="text/javascript"> new
Vue({ el: '#app', data() { return { defaultProps: { label: 'name', children: 'zones', isLeaf: 'leaf' }, items: [], loading: true, selecte: {}, count: 1, } }, created:function(){ // 一開始模擬獲取資料,使v-loading=true,獲取資料之後再把v-loading複製為false setTimeout(() => { this.getChildren(0); }, 2000); }, methods: { loadNode(node, resolve){ // 載入樹節點 console.log(node); if (node.level === 0) { return resolve(this.items); } if (node.level >= 1) { if(!node.data.leaf){ // 非葉子節點 this.getChildren(node.data.id, resolve); }else{ return resolve([]); } } }, getChildren(id, resolve){ // 根據獲取孩子節點 let data; // 模擬 Ajax 請求 if(id == 0){ respone = [{ name: 'region1', id: 1, leaf: false, }, { name: 'region2', id: 2, leaf: true, }]; this.items = respone; this.loading = false; }else{ let hasChild = Math.random() > 0.5; if (hasChild) { data = [{ name: 'zone' + this.count++, id: this.count+1 }, { name: 'zone' + this.count++, id: this.count+1 }]; } else { data = []; } } setTimeout(() => { return resolve && resolve(data); }, 500); }, checkChange(data, checked, indeterminate) { // 實現單選 console.log(data); if(checked){ // 當前點選為選擇狀態而不是取消選擇 this.selected = data; } // 獲取當前所有被選中節點的id所組成的陣列 let nodes = this.$refs.tree.getCheckedKeys(); if(nodes.length == 0 || nodes.length == 1) return; // 注意傳入的引數是陣列 this.$refs.tree.setCheckedKeys([data.id]); }, } })
</script> </html>

  線上演示
  在渲染 tree 的節點之前,需要先獲取資料再填充到 tree 裡面,這時候可以先對<el-tree>標籤設定屬性v-loading='true',這樣 tree 就會有一個載入的動態動畫,直到獲取到想要的資料之後便可以通過v-loading='false'取消載入動畫,這時候 tree 的初始資料已經渲染完畢。
  el-tree 標籤的:load="loadNode"屬性用於定義載入子樹的方法 function(node, resolve),結合 lazy 屬性便可以實現懶載入來動態載入子樹,注意 resolve() 函式接收一個數組物件作為引數來渲染 tree 的子樹。
  為el-tree 標籤新增 show-checkbox屬性可實現節點可選擇,定義node-key屬性來確定每個樹節點的唯一標識,方便獲取和選定製定的節點。
  定義@check-change="checkChange"方法來處理實現單選的邏輯或者其他邏輯,這個節點選中狀態發生變化時的回撥函式共三個引數,依次為:傳遞給 data 屬性的陣列中該節點所對應的物件節點本身是否被選中節點的子樹中是否有被選中的節點,使用this.$refs.tree.getCheckedKeys()返回目前被選中的節點所組成的陣列,注意是返回的是 node-key 屬性定義的唯一標識,所以需要先設定 node-key 屬性,使用 this.$refs.tree.setCheckedKeys([data.id])設定目前勾選的節點,注意傳入的引數是 node-key 屬性定義的唯一標識所組成的陣列。
  為<el-tree>標籤新增:expand-on-click-node="false"可實現只有點箭頭圖示的時候才會展開或者收縮節點。
  為<el-tree>標籤新增:check-strictly="true""可嚴格的遵循父子不互相關聯的做法,這樣點選子節點父節點就不會有相應的被選中狀態,以及點選子節點時父節點不會觸發 check-change函式。
  為<el-tree>標籤新增default-expand-all "true"可實現預設展開所有節點。

相關推薦

vue+element的tree元件學習模板

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title>

Vue元件--引用模板

如果說元件的template內容結構比較簡單,可以直接寫在template選項中;但是當自定義元件的template內容比較複雜的時候,直接寫就不合適了,也容易出錯,所以: 對於這種狀況Vue給出了自己的解決方案:使用模板,使用Vue的內建template模板來包裹著模板內容 &l

Vue元件學習

1.元件是指頁面上的某一部分,當建立一個大型的專案時,專案可以被分為很多元件,維護時就變的簡單多了。 2.Vue元件分為全域性元件和區域性元件,區域性元件需在例項中宣告(註冊)。 全域性元件宣告簡例: Vue.component('todo-item',{ t

Vue元件 元件模板的一些問題

1: table 標籤下面必須是tr標籤,所有需要用到 is <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title&g

Vue 2.0 學習筆記一 基於webpack模板建立專案

vuejs 框架需要基於nodejs自帶的npm下載 所以電腦先安裝nodejs 地址:https://nodejs.org/en/download/   1全域性安裝腳手架       npm install --global vue-

Web前端學習筆記——AngularJS之元件模板語法

目錄 元件 元件的定義 元件的模板 元件通訊 小結 動態元件 模板語法 插值 文字繫結 屬性繫結 列表渲染 條件渲染 NgIf 事件處理 文字 多行文字 複選框 Class St

Vuejs2.0學習之二(Render函式,createElement,vm.$slots,函式化元件模板編譯,JSX)

vue中的render函式,我在網上找了很多,下面這一篇文章最詳細 { // 和`v-bind:class`一樣的 API 'class': { foo: true, bar: false }, // 和`v-bind:style`一

認識Vue.js的元件模板

   指令是Vue.js中一個重要的特性,         主要提供了一種機制將資料的變化對映為DOM行為。         那什麼交資料的變化對映為DOM行為,         學習了Vu

vue的原始碼學習之六——6.非同步元件

1 介紹        版本:2.5.17。         我們使用vue-vli建立基於Runtime+Compiler的vue腳手架。   

vue的原始碼學習之六——5.元件註冊

1 介紹        版本:2.5.17。         我們使用vue-vli建立基於Runtime+Compiler的vue腳手架。   

vue的原始碼學習之六——2.createComponent虛擬DOM元件

1. 介紹         版本:2.5.17。         我們使用vue-vli建立基於Runtime+Compiler的vue腳手架。  &nb

vue的原始碼學習之六——1.元件化(介紹)

1. 介紹         版本:2.5.17。         我們使用vue-vli建立基於Runtime+Compiler的vue腳手架。  &nb

學習筆記——Vue元件化之notification元件

學習筆記——Vue核心技術Vue+Vue-Router+Vuex+SSR實戰精講 一、把元件的內部結構寫好,寫成一個vue檔案notification.vue。 二、全域性設定元件屬性。//如果後面不需要直接引入元件的方式呼叫,可以不用全域性註冊 index.js中

vue.js 2.0父子元件學習入門套路

前面已經瞭解過vue的元件化開發了,現在來了解一下父子元件。 先來2個子元件 myname.vue 內容如下: <template> <div id="myname">我的名字是{{name}}</div>

vue元件學習6(props傳參)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>D

vue的指令與模板

原生 bool -s rop char lose bin pro helloword 一、指令---是一種特殊的自定義間屬性   指令的職責就是當表達式的值改變時,相應的將某些行為應用到DOM上,在Vue中,指令以v-開頭 helloworld例子:數據綁定,點

vue-router 入門學習

vue-router對於單頁面應用,尤其是移動端的網頁應用,使用<a></a>標簽實現頁面切換和跳轉會有300ms的延遲,遇到網速慢就會一直加載。所以在SPA應用中,用視圖切換來模擬頁面的切換vue-router 是Vue.js官方的路由插件,它和 Vue.js是深度集成的,適用於構建

vue+node.js學習筆記

拷貝 vue 靜態頁 -1 註冊 分享 head ade view 一、搭建vue開發環境 vue init webpack newmall cnpm install npm run dev 二、測試靜態頁 把靜態頁的css拷貝進來 src

Vue.js 基礎學習計算屬性computed

urn 同時 處理 log 添加 類型 fun new compute 我們要寫一個成績表如下 數學 90 物理 80 英語 70 <div id="app"> <table border="1"> <tr> &

Vue.js 基礎學習之混合mixins

sda itl 實現 var title cte 混合 method ons 混合以一種靈活的方式為組件提供分布復用功能。混合對象可以包含任意的組件選項。當組件使用了混合對象時,混合對象的所有選項將被“混入”組件自己的選項中。 當混合對象與組件包含同名選項時,這些選項將以適