vue Element 기반 사용자 정의 트 리 예제 코드 구축
프로젝트 를 할 때 사용자 정의 트 리 컨트롤 을 사용 하여 표 트 리 를 구축 해 야 합 니 다.github 에서 적당 한(예 쁜)것 을 찾 지 못 하고 직접 사용 할 수 있 는 것 을 찾 았 습 니 다.Element 의 구성 요소 설명 을 볼 때 render 를 사용 하여 노드 스타일 을 정의 할 수 있 습 니 다.그래서 이 를 바탕 으로 증가,삭제,변경 할 수 있 는 트 리 구성 요 소 를 봉 인 했 습 니 다.이제 그것 의 사용 과 실현 을 공유 합 시다.
컨트롤 데모
github 에 걸 려 있 는 gif 는 비교적 카드 가 걸 릴 수 있 습 니 다.큰 사람 이 정적 자원 을 걸 수 있 는 곳 이 어디 있 는 지 알 고 있 습 니까?감사합니다.!
컨트롤 사용
개요
4
문서.
props
속성
설명 하 다.
유형
value
원본 데이터,v-model 양 방향 바 인 딩 사용 가능
Array
events
이벤트 이름
설명 하 다.
매개 변수
SaveEdit
트 리 노드 를 편집 하거나 추가 한 저장 이 벤트 를 누 르 십시오.
(부모 노드 데이터,현재 노드 데이터,next)
DelNode
노드 이벤트 삭제
(부모 노드 데이터,현재 노드 데이터,next)
NodeClick
노드 클릭 이벤트
(현재 노드 데이터)
소스 데이터 기술
속성
설명 하 다.
value
트 리 노드 의 유일한 표식
label
트 리 노드 의 표시 이름
status
(1:편집 상태)(0:상태 표시)(-1 편집 불가 상태)
children
하위 노드 데이터
호출 예시
<m-tree
v-model="tableTree"
@SaveEdit="SaveEdit"
@DelNode="DelNode"
@NodeClick="handleNodeClick"></m-tree>
SaveEdit(parentNode,data,next){
var param = {
parentNode:parentNode,
node:data
}
this.$http.post(URL,param).then((response) => {
if(response.status == 200){
next(true,response.body.data.nodeId)
}else{
next(false)
}
})
}
실현 방식하위 노드 템 플 릿 구축
<span class="span_item">
<span @click="Expanded">
<Input v-if="node.status == 1" style="width: 100px;" v-model="node.label" size="small" ></Input>
<Icon v-if="node.status == 0" type="asterisk"></Icon>
<Icon v-if="node.status == -1" type="ios-keypad-outline"></Icon>
<span v-if="node.status != 1">{{node.label}}</span>
</span>
<span v-if="node.status == 1">
<Button style="margin-left: 8px;" size="small" type="success" icon="checkmark-circled" @click="SaveEdit"> </Button>
<Button style="margin-left: 8px;" size="small" type="ghost" icon="checkmark-circled" @click="CancelEdit"> </Button>
</span>
<span class="span_icon">
<Icon v-if="node.status == 0" style="margin-left: 8px" color="gray" type="edit" size="16" @click.native="OpenEdit"></Icon>
<Icon v-if="node.status == 0" style="margin-left: 8px" type="plus-round" color="gray" size="16" @click.native="Append"></Icon>
<Icon v-if="node.status == 0&&node.children.length < 1" style="margin-left: 8px" type="ios-trash" color="red" size="18" @click.native="Delete"></Icon>
</span>
</span>
하위 노드 는$emit 를 통 해 부모 노드 이벤트 에 알 립 니 다.
SaveEdit(){
//
this.$emit('SaveEdit',this.nodeData)
},
부모 노드 핵심 구현,renderContent 함수 로 하위 노드 템 플 릿 을 불 러 옵 니 다.노드 저장 을 클릭 할 때 업무 파 라 메 터 를 runParam 에 저장 하여 업무 수행 실패(네트워크 요청 실패,서버 이상 등)의 데이터 스크롤 백 에 사용 합 니 다.
<el-tree
class="filter-tree"
style="overflow:auto;"
:data="treeData"
:filter-node-method="filterNode"
@node-click="handleNodeClick"
ref="tree"
node-key="value"
:expand-on-click-node="false"
:render-content="renderContent"
default-expand-all>
</el-tree>
//
renderContent(h, { node, data, store }) {
return h(TreeItem,{
props:{
value:data,
treeNode:node
},
on:{
input:(node)=>{
data = node
},
Append: () => {
node.expanded = true
data.children.push({ value: this.$utilHelper.generateUUID(), label: ' ', children: [],status:1,isAdd:true })
},
//
SaveEdit:(nodeData)=> {
//
var parentNode = this.$utilHelper.getNode(this.treeData,data.value).parentNode
this.runParam.parentNode = parentNode
this.runParam.data = data
this.runParam.nodeData = nodeData
this.$emit('SaveEdit',parentNode,data,this.CanSaveNext)
}
}
})
}
작업 결과 갈고리,next 함수 가 false 에 들 어 오 면 작업 실 패 를 판정 하고 runParam 의 매개 변 수 를 사용 하여 스크롤 백 을 진행 합 니 다.이 노드 의 편집 저장 작업 은 잘못 되 었 습 니 다.소스 데모:트 리 컨트롤
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.