GithubHelp home page GithubHelp logo

Comments (12)

 avatar commented on May 5, 2024

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.

malkomalko avatar malkomalko commented on May 5, 2024

http://cl.ly/image/0W2w0C2t1a3C

That's a quick ss of the type of event I was talking about.

from discussion.

 avatar commented on May 5, 2024

Not tested but you should be able to stop listening for that event with vm.$off

from discussion.

yyx990803 avatar yyx990803 commented on May 5, 2024

When a VM is destroyed, no matter manual or automatically, all its listeners are turned off, both $on and v-on types.

from discussion.

malkomalko avatar malkomalko commented on May 5, 2024

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.

malkomalko avatar malkomalko commented on May 5, 2024

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.

yyx990803 avatar yyx990803 commented on May 5, 2024

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.

malkomalko avatar malkomalko commented on May 5, 2024

@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.

yyx990803 avatar yyx990803 commented on May 5, 2024

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.

malkomalko avatar malkomalko commented on May 5, 2024

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.

yyx990803 avatar yyx990803 commented on May 5, 2024

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.

malkomalko avatar malkomalko commented on May 5, 2024

Love it! Closing this.

from discussion.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.