Comments (2)
Hi. You can restore previous value
in the @input
handler if the new one is not something that you expected.
<sl-vue-tree
v-model="nodes"
ref="slVueTree"
@input="onInputHandler"
/>
new Vue({
el: '#app',
components: { SlVueTree },
data: function () {
return {
nodes: nodes,
prevNodes: this.cloneDeep(nodes)
}
},
methods: {
onInputHandler(newNodes) {
let slVueTree = this.$refs.slVueTree;
let limitReached = false;
let childrenLimit = 3;
slVueTree.traverse((node) => {
if (node.children.length > childrenLimit) limitReached = true;
});
if (limitReached) {
alert('Limit is reached');
this.nodes = this.cloneDeep(this.prevNodes);
return;
}
this.prevNodes = this.cloneDeep(newNodes);
},
cloneDeep(obj) {
return JSON.parse(JSON.stringify(obj))
}
}
})
from sl-vue-tree.
Regarding the example above, it's important to add the once
modifier to the @input
attribute, otherwise, onInputHandler
will likely be called TWICE for every node drop. It seems that at least one of the following event listeners also triggers an input
event:
<sl-vue-tree
v-model="nodes"
ref="slVueTree"
@select="onSelectHandler"
@drop="onDropHandler"
@toggle="onToggleHandler"
@nodecontextmenu="onNodecontextmenuHandler"
@input.once="onInputHandler"
/>
Obviously, it would be great to have full-bodied support for both node drag and node drop validation. New API methods for allowDrag
and allowDrop
, when returning false
, should do all the work of preventing a node drag or drop, including displaying a not-allowed
mouse cursor.
I'm going to wind up having to roll my own solution for this. Once I get it up and running, I'll share.
from sl-vue-tree.
Related Issues (20)
- Add node property to draginfo slot
- Once drag starts there's no way to cancel
- Too many rerenders HOT 1
- How I set max-level that allowed?
- How to change a tree programmatically based on event
- How to change fa fa-file style css? HOT 1
- edgeSize is not working HOT 1
- Remove node using contextmenu not working if node is not selected HOT 1
- tree is not reflecting data properly
- Add new node after selectedNode
- Is there a way to expand/collapse nodes programatically? HOT 2
- Vue 3 compatibility HOT 3
- Can we have a `hover` event please?
- Publish 1.8.5 HOT 1
- Dragging throws TypeError: e.onDragendHandler is not a function HOT 2
- Any examples for working with a pre-existing data structure?
- The node does not deselected HOT 1
- Passing data from externaldrop
- Access dragstart,dragover for validating
- How to Add Node on Empty Tree
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sl-vue-tree.