ElementUI中el-tree節(jié)點的操作的實現(xiàn)
其實tree的有些方法用起來是很方便的,
this.$refs.tree.getCheckedKeys();這個原生態(tài)的方法。官方文檔上說的是,返回一個數(shù)組。有了這個方法,我們就可以得到選中的每個節(jié)點的id,拿到了id,那所有的問題就迎刃而解了。
廢話不多說,直接上代碼
html
<div id="app">
<el-row>
<el-button @click="checkedKeys">得到節(jié)點id</el-button>
<el-button @click="addNode">添加節(jié)點</el-button>
<el-button @click="checkedKeys">修改節(jié)點</el-button>
<el-button @click="deleteNode">刪除節(jié)點</el-button>
<br/>
<br/>
<el-tree
ref="tree"
:data="treeList"
:props="defaultProps"
@node-click="handleNodeClick"
show-checkbox=true
node-key="id"
:check-strictly="true"
>
</el-tree>
<el-input>輸入框</el-input>
<el-dialog title="添加"
:visible.sync="dialogVisible"
>
<el-form ref="form">
<el-form-item label="節(jié)點父類型">
<el-select placeholder="請選擇要添加節(jié)點的父節(jié)點" v-model="treeNode.parentId" @change="selectChange" >
<el-option label="根節(jié)點" :value="0"></el-option>
<el-option v-for="item in treeListData" :label="item.categoryName" :value="item.nodeId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="節(jié)點名稱">
<el-input placeholder="請輸入節(jié)點名稱" v-model="treeNode.categoryName" style="width: 220px"></el-input>
</el-form-item>
</el-form>
<span>
<el-button @click="cancleSaveNode">
取消
</el-button>
<el-button @click="saveNode">
確定
</el-button>
</span>
</el-dialog>
</el-row>
</div>
js代碼
<script type="text/javascript">
var _treeNode={
nodeId:0,
categoryName:"",
parentId:0
}
var app = new Vue({
el:'#app',
data:{
treeNode:_treeNode,
treeList:[],
treeListData:[], // 無層級結(jié)構(gòu)節(jié)點數(shù)據(jù)
defaultProps:{
children: 'childList',
label: 'name'
/* label: 'categoryName'*/
},
dialogVisible:false, // 對話框,默認不打開
api:{
treeDataList:"/category/treeList.do", // 得到節(jié)點數(shù)據(jù),無層級結(jié)構(gòu) GET
saveTreeNode:"/category/saveTreeNode.do", // 得到節(jié)點數(shù)據(jù),無層級結(jié)構(gòu) GET
deleteTreeNode:"/category/deleTreeNode.do",
}
},
methods: {
cateListFunction: function () {
$.ajax({
type: "get",
url: "/category/cateList.do",
success: function (result) {
app.cateList = result;
app.treeList=result;
}, error: function (result) {
}
});
},
// 點擊節(jié)點名稱觸發(fā)的事件
handleNodeClick: function (data) {
alert(data.id);
console.log(data);
},
// 獲得選中的節(jié)點的key
checkedKeys:function (data) {
alert(JSON.stringify(this.$refs.tree.getCheckedKeys()));
},
// 添加節(jié)點查詢所有節(jié)點的方法
addNode:function () {
// 查詢所有節(jié)點數(shù)據(jù)無層級結(jié)構(gòu)
app.getTreeNode();
app.dialogVisible=true;
},
// 保存節(jié)點
saveNode:function () {
//alert(app.treeNode.categoryName+app.treeNode.parentId);
axios.post(app.api.saveTreeNode,app.treeNode).then(function (resule) {
app.dialogVisible=false;
app.treeNode.parentId=0;
app.treeNode.categoryName="";
app.cateListFunction();
});
},
cancleSaveNode:function () {
app.dialogVisible=false;
app.treeNode.parentId=0;
app.treeNode.categoryName="";
},
// 下拉框選中事件
selectChange:function (val) {
// select控件的option綁定的值為節(jié)點的id,我們將值綁定在要添加的元素的父id
//alert("得到節(jié)點類型"+val);
},
// 批量刪除節(jié)點(若有子節(jié)點則不予刪除)
deleteNode:function () {
app.getTreeNode();
var str=[];
str =this.$refs.tree.getCheckedKeys();
if(str.length<=0){ // 因為vue返回的是選中的key的數(shù)組
// ,如果沒有選擇任何元素返回 "[]",這是兩個元素,所以我們判斷長度為2時,為空
app.$message.error("請至少選擇一個節(jié)點");
return ;
}
for(var i in str){
for(var j in app.treeListData){
if(app.treeListData[j].parentId == str[i]){
app.$message.error("父節(jié)點不可被刪除");
return;
}
}
}
axios.post(this.api.deleteTreeNode,str).then(function (result) {
app.$message({message: '刪除成功', type: 'success'});
app.getTreeNode();
app.cateListFunction();
});
},getTreeNode:function () {
// 查詢所有節(jié)點數(shù)據(jù)無層級結(jié)構(gòu)
axios.get(this.api.treeDataList)
.then(
function(result){
// vue給我們封裝的得,我們所得到的數(shù)據(jù)在返回的對象的data屬性里
app.treeListData=result.data;
});
}
},
created: function () {
this.getTreeNode();
this.cateListFunction();
}
});
</script>
controller
/**
* 保存節(jié)點
*/
@RequestMapping("/saveTreeNode.do")
@ResponseBody
public void saveTreeNode(@RequestBody TbCategory category){
System.out.println(category.getCategoryName() +"------" +category.getParentId());
categoryService.insert(category);
}
@RequestMapping("/deleTreeNode.do")
@ResponseBody
public void deleTreeNode(@RequestBody String str){
System.out.println(str);
String [] strIds = str.substring(1,str.length()-1).split(",");
for(int i =0;i<strIds.length;i++){
categoryService.delete(Long.valueOf(strIds[i])); // 1,2
}
}
以上代碼真的沒有什么好解釋的,大家直接按照我的代碼,就不會有問題了
截圖:



到此這篇關(guān)于ElementUI中el-tree節(jié)點的操作的實現(xiàn)的文章就介紹到這了,更多相關(guān)ElementUI el-tree節(jié)點內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue.js動態(tài)修改background-image問題
這篇文章主要介紹了vue.js動態(tài)修改background-image問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
vue去掉嚴格開發(fā),去掉vue-cli安裝時的eslint或修改配置方式
這篇文章主要介紹了vue去掉嚴格開發(fā),去掉vue-cli安裝時的eslint或修改配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04
Vue $emit $refs子父組件間方法的調(diào)用實例
今天小編就為大家分享一篇Vue $emit $refs子父組件間方法的調(diào)用實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
vue與bootstrap實現(xiàn)時間選擇器的示例代碼
本篇文章主要介紹了vue與bootstrap實現(xiàn)時間選擇器的示例代碼,非常具有實用價值,需要的朋友可以參考下2017-08-08
vue-cli3使用mock數(shù)據(jù)的方法分析
這篇文章主要介紹了vue-cli3使用mock數(shù)據(jù)的方法,結(jié)合實例形式分析了vue-cli3使用mock數(shù)據(jù)的相關(guān)實現(xiàn)方法與操作注意事項,需要的朋友可以參考下2020-03-03

