0

I am trying to organise my code into components/modules and I'm struggling to understand how to deal with event listeners and/or communicate between JS files. I will explain with a simplified example:

In this hypothetical, app.js imports all the other js file components. In app.js I call a function in nav.js to render my nav to the DOM and I add event listeners to a single button.

When the button is clicked my event handler inside nav.js picks it up and I want to somehow communicate back to app.js and tell it to call a function inside pageA.js to render the page.

I'm not sure if this is the right approach or if I'm missing a key concept to get this working. Any tips would be appreciated.

index.js

import Nav from './nav.mjs';
import PageA from './pageA.mjs';
export default class App {
    constructor() {
        this.nav = new Nav();
        this.pageA = new PageA();
        this.nav.renderNav();
    }
}

nav.js

export default class Nav {
    constructor() {
    }
    renderNav(){
        let button = document.createElement("button");
        button.innerHTML = "Page A";
        document.body.appendChild(button);
        button.addEventListener ("click", function() {
            // How do I call renderPageA() in pageA.js?
        });
    }
}

pageA.js

export default class PageA {
    constructor() {
    }
    renderPageA(){
        let pageDiv = document.createElement('div');
        document.body.appendChild(pageDiv);
    }
}

1 Answer 1

1

You can pass pageA instance as a parameter in the Navs constructor.

//Nav constructor
constructor(pageA){
    this.pageA = pageA
}

//Add this to the event listener's callback:
this.pageA.renderPageA()

//index.js
this.nav = new Nav(pageA)

Note that you have to instantiate pageA before nav for this to work.

Sign up to request clarification or add additional context in comments.

1 Comment

ah yes.. seems so obvious now. Thanks!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.