Issue with Vue Router: Hyperlinks within HTML5 Canvas images are not correctly redirecting to the intended URL

I'm working on a project to connect images on an HTML5 canvas to specific URLs for navigation within a website.

My tools include Vue, FabricJS for the canvas, and Vue-router for routing.

let computerClick = function (evt) {
  console.log("Computer clicked");
  this.$router.push('/app');
};

After clicking an item on the canvas, the above function is triggered, but I encounter this error:

Uncaught TypeError: Cannot read property 'push' of undefined

I would appreciate guidance on resolving this issue. Thank you!

Answer №1

When defining a function in this manner, the reference to this within the computerClick function does not point to the Vue instance and therefore results in being undefined.

It might be more appropriate to reconsider your code structure in order to avoid defining functions in this way. A better approach would be to make computerClick a component method (which can then be called using this.computerClick()):

methods: {
  computerClick() {
    console.log("Computer clicked");
    this.$router.push('/app');
  }
}

Alternatively, you can also bind the current Vue instance to the function like this:

let computerClick = (function (evt) {
  console.log("Computer clicked");
  this.$router.push('/app');
}).bind(this);

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

Guide to displaying a component within the Vue instance

I am currently in the process of developing a Nuxt module that will not interfere with the main Nuxt application. My approach involves creating a separate Vue instance and mounting it as a child node under the body element, similar to a child node to the _ ...

JavaScript algorithm for determining the most optimal combination (with the fewest items) of lengths that are under a specified threshold

What is the optimal way to select a combination of n values so that their sum (n1+n2+n3+n4+n5) is minimized? maxDiff = D requiredLength = L lengthArray = [l1, l2, l3, l4, l5, l6] 1st constraint, diff = L - (n1*l1 + n2*l2 + n3*l3 + n4*l4 + n5*l5) 2nd con ...

What is preventing JSON.parse() from extracting the data from this json string in this particular scenario?

One of the challenges I'm currently facing involves extracting a specific item from a JSON-formatted string and displaying it on the screen using .innerHTML. The JSON string, named myData, is retrieved from a MySQL database via PHP. To achieve this, ...

Setting up the Webpack DevServer to manage POST requests in a React JS application

I am currently implementing a payment gateway into my React JS project that utilizes client-side routes. AppRouter.js import React from 'react'; import {BrowserRouter, Route, Switch} from 'react-router-dom'; import {TransitionGroup, C ...

Error: Unexpected token '<' encountered in Ajax request with status code 200

While attempting to run an ajax request, I keep encountering the error message 'Syntax Error: unexpected token <' along with a xhr.status of 200. Strangely, I am able to successfully email the variable passed from the JavaScript file to the PH ...

What is the best way to fetch data from an API or Firebase in React before displaying it to the user?

I need to pull information from Firebase, update it in redux, and showcase it to the user. Can conditional rendering be implemented in App.js? If I fetch data in HomePage.js (a component), update it in redux, and display it. Then, if the user goes to anot ...

Harnessing the power of JSON within an HTML document to display dynamic data

Check out the JSON data through this link: The JSON file contains information about the weather. I need assistance with incorporating the data from the provided link into my HTML document as I am new to utilizing JSON for this purpose. <html> < ...

Using a forEach loop within the RequestAnimationFrame function

I am currently developing a project using THREEjs and would like to organize it in the following manner: class Blah scene : new THREE.Scene() renderer : new THREE.WebGLRenderer() camera : new THREE.PerspectiveCamera() ...

What is the best way to display a popup on the right side when hovering?

I currently have a situation where a popup appears at the top when a user hovers over a link or text. However, the issue is that the popup is not fully visible on the screen. The top part of the popup seems to be hidden in the browser. My application uses ...

Running Jasmine asynchronously in a SystemJS and TypeScript setup

I am currently executing Jasmine tests within a SystemJS and Typescript environment (essentially a plunk setup that is designed to be an Angular 2 testing platform). Jasmine is being deliberately utilized as a global library, rather than being imported vi ...

Creating a Vue.js directive that can access the context of a loop

Vue.directive("custom", { inserted(el, binding, vnode) { let val = binding.value; let arg = binding.arg let mods = binding.modifiers let expr = binding.expression let cont = vnode.context .... // adjust l ...

Convert an array to a string using a JavaScript function

I am encountering an issue with the code below: Every time I pass the Array to "track," I encounter an error. It seems like there might be a mismatch between passing an object and a string as input, but I am uncertain and unable to verify. for (var i = 0; ...

Tips for integrating AngularJS into Zend Framework 2

Hi there! I am a newcomer to Zend Framework 2 and I am exploring the integration of AngularJS into my project. Currently, I am calling a function in the controller like this: return new ViewModel(array( 'result' => $result, 'use ...

Guide to clearing the application cache for a particular page within a Single Page Application

In our Angular and MVC project, we have implemented two pages - an Online page and an Offline page in a Single Page Application (SPA) setup. The Offline page should load when the network connection is lost, and an error should be displayed when trying to a ...

issue related to prototypejs event handlers and event triggering

Currently, I am in the process of learning both the prototype framework and javascript as a whole. My current task involves refactoring some existing code to generate HTML from data within a class by utilizing an event listener. Despite my efforts, I am en ...

What is the best way to structure files within the css and js folders after running the build command in Vue-cli?

Vue-cli typically generates files in the following structure: - dist -- demo.html -- style.css -- file.commom.js -- file.commom.js.map -- file.umd.js -- file.umd.js.map -- file.umd.min.js -- file.umd.min.js.map However, I prefer to organize them this way: ...

The component variable fails to update after choosing an option from the select tag

Is there a way to dynamically populate a second select tag based on the selected option from the first select tag in VueJS? I am facing an issue where the variable declared in the component does not update even though the API response is correct when a cho ...

What is the outcome when the return type is a string or a function that takes validation arguments and returns a string?

This excerpt is extracted from line 107 over here. From my understanding, it indicates: The function either returns a string directly or a function that accepts ValidationArguments as input and then produces a string output. Given that this is new to m ...

Issues with AngularJS ng-click functionality not functioning properly within a jQuery Dynatable grid display

Currently, I am in the process of creating an HTML file with ng-repeat functionality. Here is a snippet of my code: var li = '<div ng-repeat="list in viewsList">...</div>'; Following this, I utilize the following lines of code: va ...

What is the method to prevent the label from closing in the MUI 5 datepicker?

Is there a method to prevent the Material 5 Datepicker from closing when there's a label but no value? Current Scenario: Current Desired Outcome: Expected Sample Code: <LocalizationProvider dateAdapter={AdapterDayjs}> <DatePicker lab ...