Execute a function whenever a route changes in vue.js

After integrating Intercom into my app, I found that I need to call window.Intercom('update'); every time the URL changes.

Instead of adding this call in the mounted() method for each component, I prefer to utilize navigation guards to avoid repetitive code in multiple places.

Currently, I have the following setup:

router.afterEach((to, from) => {
  eventHub.$off(); // This is for other purposes not related here
  console.log(window.location.href); // This logs the previous URL
  window.Intercom('update'); // Which means it also uses the previous URL
})

This implementation triggers intercom('update') before the URL change, while I require it to happen after the URL has been updated.

Is there a specific hook that executes only when the URL has changed? How can I achieve this?

Thank you!

Answer №1

Had some doubts about whether this solution would actually work, as your existing code looks like it should be sufficient. However, let's give it a shot...

You could consider monitoring changes in the $route object

new Vue({
  // ...
  watch: {
    '$route': function(to, from) {
      Intercom('update')
    }
  }
})

Answer №2

I just thought of a different approach compared to Phil's suggestion. You could also explore utilizing Global Mixin. This feature allows you to combine its methods or lifecycle hooks into all components.

Vue.mixin({
  mounted() {
    // implement your desired functionality here
  }
})

Answer №3

initialize() {
    this.$watch(
      () => this.$route.params,
      () => /*Custom Function*/
    );
  },

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Ways to create a vertical bottom-up tree view using d3.js

I am trying to create a reverse tree view, starting from the bottom and moving up. What modifications do I need to make? Here is the link to my JS Fiddle: ...

What separates name="" from :name=""?

If the :name="name" syntax is used, the value of the name attribute will be the unique data it receives from the props. However, if I use name="name" without the preceding :, then it will simply be "name". What role does the : play in the name attribute? ...

A method for extracting URL parameters based on the matching route path

Is it possible to parse a given URL string in relation to the match.path value? For instance, if the current route is: <Route path="/some/path/:type" /> To obtain the type parameter of the current URL, one can simply use match.params.type ...

Border disappears with autocomplete feature

Despite setting autocomplete to off in my form, modern browsers tend to override this. An issue arises where the border of a user's input field remains intact when they manually type their name, but is removed when the browser autofills it. https://i ...

In the event that the final calculated total is a negative number, reset it to zero. Inform the user of an error through the use of a prompt dialog box

I'm having trouble getting the grand total to display as 0 when I enter all amounts in positive values and then change the unit prices to negative values. However, it works fine when I only enter negative values throughout. Can someone please help me ...

Obtaining the desired element from a function without relying on an event

Recently, I've been working on a sidebar with several links <sidebar-link href="/dashboard" icon="HomeIcon" :is-active="isActive()" /> <sidebar-link href="/test" icon="TestIcon" :is-active=&qu ...

Seeking guidance on Ajax .... in need of clarification

Could someone provide an explanation for this code snippet: const greeting = 'hi'; $.ajax({ type: "POST", url: "check.php", data: "greeting="+greeting, success: function(response){ alert( "Response received from server: " + resp ...

Converting a nested array of children into a string within a multidimensional array

I am currently in the process of updating a single value (ElementStatus) within the multidimensional JSON file shown below. BuildingID: 1521 BuildingName: "PEN LLOYD BUILDING" BuildingNumber: "A" ElementList: Array(15) 0: {ElementID: 114, SurveyTypeID: 3, ...

Revamping the current text for the circle feature in ProgressBar.js

I am working on a project where I use ProgressBar.js to generate a circle with a percentage displayed in the center. While the circle renders correctly initially, I'm facing an issue when trying to update the text (percentage) after running it again w ...

Why doesn't vuex4.0 function properly as hooks when used within a Vue3 onMounted async function?

When foo() is completed, I need to choose one of bar1(), bar2(), or bar3() as the actual function to be sent to the web socket and store the callback value in vuex. 1. bar1(): If I include bar1() in the onMounted scope, it does not work and the store beco ...

Issue with rendering partials in ExpressHandlebars in NodeJS

I am currently facing an issue while working with express-handlebars. I am attempting to use partials, but I keep encountering the following error message: The partial header could not be found. In my app.js file, the code appears as follows: var expr ...

Traverse the array of nested JSON objects in an iterative manner

I need to iterate through a JSON array object with the following structure: var myJSONObject = { "abc": { "prod_1": [ {"prod_ver" : "prod 1 ver 1"}, {"prod_ver" : "prod 1 ver 2"}, ], "prod_2": [ ...

Experiencing difficulty in successfully updating a React child component when the prop passed from the parent component is

In the backend implementation, I have successfully set up a socket.io, Node, Express configuration that has been tested to work correctly. It is emitting the right number of broadcasts to the appropriate client using socket.emit("team_set", gameI ...

Vue.js displaying the error message: "The maximum size of the call stack has been exceeded"

Could you assist me in resolving this issue? router.js routes: [{ path: "", component: () => import("@/layouts/full-page/FullPage.vue"), children: [{ path: "/pages/login", name: "page-login", component: () => import("@/views/pages ...

AngularJS meta tags featuring dynamic asynchronous content

I am currently facing a challenge with my angular application that is running within a .net application. My main goal is to implement meta tags for SEO and other purposes. However, the issue I'm encountering is that I cannot determine the page title u ...

How can I specifically disable the next month in MUI Datepicker?

Employing MUI version 5, how can I disable only the next month in the datepicker while keeping the others functional? ...

What is the response of Express when it encounters numerous identical asynchronous requests from the same origin?

Currently, I am utilizing Express.js for my project. There is an async function that performs a task that can take anywhere from 20 to 30 seconds to complete. Once the task is done, it increases a user's counter in the database. However, users are req ...

Load charts.js synchronously into a div using XMLHttpRequest

At the moment, there is a menu displayed on the left side of the page. When you click on the navigation links, the page content loads using the code snippet below: if (this.id == "view-charts") { $("#rightContainer").load("view-charts.php"); $(thi ...

The length property of a jQuery array may not always match the actual length of the array

Recently delving into jquery, I encountered the issue described in the title. Below is an excerpt from my controller code: [HttpPost] public JsonResult getProjectList() { List<Project> projectList = new List<Project>(); ...

The :first selector examines the parent's parent as a reference point, rather than the immediate

I am facing a challenge with shuffling large elements within my layout because of floating them and attempting to display them. Specifically, the elements with the class .gallery-large always need to be the first child inside the .item container. There are ...