[toc]
tree樹形控制項在前端開發中必不可少,對於資料的展示現在**大都採取樹形展示。因為大資料全部展示出來對於使用者來說是不友好的。今天我們自己手寫乙個tree外掛程式。
同樣的我們先來看看他的用法其實和iview一樣。用我們封裝好的模板就行了。下面是做乙個部門樹。部門下面掛著人員這個功能。
js就是去填補上述的資料,比如deptdata、sysuserrole這些。至於這些屬性代表什麼意思我們先不著急看。先上個效果圖。
那麼我們的zxhtree控制項是在**註冊的呢,這裡被我們抽離在component.js裡。vue.component('zxhtree', {});
繼續在zxhtree裡看除繫結的節點是template: '#tree-template'
。tree-template的模板是在component.html中寫好的
而在tree-template用到的tree-item控制項才是真正的tree控制項。這裡是為了將樹形包裹起來,所以才包裹了一層模板。tree-item對應的模板**是
可以很明顯的看到這裡我們使用了遞迴進行展示樹形結構。因為樹形結構你無法確定層級。所以在裡面又使用了針對子節點的展示tree-item
.
屬性含義
示例treekey
內部樹形展示
deptid
vistreekey
樹形展示key
deptid
ids預設顯示的資料
無names
預設顯示的資料
無treename
內部真是展示資料
deptname
vistreename
樹形展示資料
deptname
treechildren
當前樹的子節點資料
無model
當前樹的資料
無(m)keyname
用於接受返回的資料
無控制項接受資料處理邏輯
//接收到資料在外面套一層
if(this.model[this.treekey]==undefined)
if(this.model[this.treename]==undefined)
if (this.model.disabled == true)
console.log('元件註冊了嗎');
if ((','+this.ids+',').indexof(','+this.model[this.treekey]+',') == -1) else
if(this.ids!='')
if (this.names.indexof(",") == -1&&this.names!='') else}}
渲染預設資料
var newopt =,'name':{}};
newopt.key = object.assign(this.opt.key, opt.key);
newopt.name = object.assign(this.opt.name, opt.name);
var flag=false;
for(var index in this.model[this.treechildren])
}if(!flag)
for(var key in newopt)
this.opt=newopt;
this.$emit('keyname', newopt);
選擇節點資料處理
if(selected instanceof mouseevent)else
this.model.checkstatus=this.checkstatus;
if (this.model.expected != true)
for(var index in this.$refs.child)
this.$emit('keyname', this.opt);
加入戰隊
深入理解vue元件
當使用table select等標籤時,元件標籤化可能會有bug,此時應該使用 is 接受元件。在子元件定義data時,data必須是乙個函式,不能是乙個物件。在vue中如果要操作dom,需要使用 ref 引用,從而獲取dom節點。需求 定義乙個子元件,使其數字自加,在父元件中對子元件的數字求和。單...
Vue元件深入理解 插槽
插槽相當於佔位符,用表示 用於父元件填充子元件的資訊 在中間填充內容,則擋傳入的slot中不存在時,則會使用使用填好的內容。type submit submitslot button 父級元件模板不能編譯子元件的變數,因此需要值傳遞。插槽有點類似於父子元件傳值,但傳的不是值,而是傳進去復用的模板 實...
vue初學 3 深入理解vue元件
舉個例子比較能說明問題 1 vue.component row 如何解決?is語法 這樣就解決了這個問題了。vue.component counter data function methods 在兩個子元件用ref引用 接著在根元件中新增方法來處理資料 handlechange function ...