Comments (12)
Depending on the type of event you are using they will be destroyed when the ViewModel is destroyed (read bottom of http://vuejs.org/guide/events.html). However, if you are using some of the ViewModel events such as vm.$on or vm.once you can manually destroy those with vm.$off (see http://vuejs.org/api/instance-methods.html#vm-off-event-callback-). If you are setting up event listeners with native Javascript or jQuery you will have to also manually destroy those events.
from discussion.
http://cl.ly/image/0W2w0C2t1a3C
That's a quick ss of the type of event I was talking about.
from discussion.
Not tested but you should be able to stop listening for that event with vm.$off
from discussion.
When a VM is destroyed, no matter manual or automatically, all its listeners are turned off, both $on
and v-on
types.
from discussion.
Thanks for the clarification. One thing I'm trying to reason about with these events is you have to have an idea in your head on the hierarchy. Sometimes in order to communicate b/w components you have to $dispatch an event up, catch it with an $on at the top component and then $broadcast to another child component.
Thinking maybe it would be a better idea to just dispatch the event once from the vm of choice. But having a lot of component.$parent.$parent just to find the correct vm kind've stinks. Maybe a way to target the parent vm by name so you can dispatch properly.
Hopefully this wasn't too cryptic, just starting to find some patterns as I'm building out my app with Vue.
from discussion.
Is there some property to access the component name from the view model? If so I can just iterate up through the $parent stack to get access to the appropriate component.
from discussion.
The built-in VM events are meant for reusable components, which often have no knowledge of what the surrounding hierarchy looks like.
When you have full control of the components and their structure, it is often cleaner to have a global event bus shared by all VMs. This way you don't have to worry about propagating events and still keep VMs loosely coupled.
from discussion.
@yyx990803 I'm thinking you could still get the reusable aspect of components by still having a global type of event bus. What do you think the tradeoffs are of broadcasting your apps events from $root?
from discussion.
By global event bus I mean just a single Emitter instance, accessed by all VMs, and you simply namespace the events. When broadcasting you are recursively walking down the entire VM tree which can be expensive when you have large structures.
from discussion.
Yah, now after thinking about it I probably wouldn't go that approach and would want to try to keep all of my components designed in a way they are isolated. If that means having to manage the pathway of events firing to get to the right place, I can live with that.
from discussion.
The propagation mechanism is just like DOM events, and since you compose components in the DOM, personally I find it pretty natural to work with.
from discussion.
Love it! Closing this.
from discussion.
Related Issues (20)
- Use ||(or) in v-if (with nuxt js)
- Instantiate a copy of a component directly in that component HOT 1
- Call pre-defined javascript method on vue js event
- What about js-data.io?
- How to make vue bind to, or work with, html in properties
- Convert VueJS 1 to VueJS 2 HOT 2
- Third Party Libraries - Make non reactive?
- why v-switch not included in vuejs and what the alternative way HOT 1
- Use raw html inside v-bind
- iOS event bound using addEventListener is not triggering
- How to validate when blur a component.
- Google is not defined HOT 2
- vuejs can not find method or variable inside a callback function HOT 2
- Thousands of rows performance HOT 1
- how to pass Header + Body in POST api using Vue JS-axios HOT 4
- Conditional rendering and child component
- Fetch the value of element dynamically
- Vue breaks DataTables and Pace JS
- Bootstrap4 tag b-form-input has problem with @blur
- Invalid prop: Expected `Basic type`, got Nulll.
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 discussion.