Vue.js 2: Keep an eye on changes, but wait until after the initial data fetch

I recently entered the Vueverse (using Vue.js 2) and I'm encountering some challenges with the watch feature. When the component is mounted, I fetch data from an API and use it to set the value of a radio button. Essentially, I have two radio buttons with values of 1 and 0 (true/false).

The watcher seems to be functioning correctly as it triggers when the value changes. However, I don't want it to trigger on the initial change - that's when I first set the value from the backend.

I've experimented with different lifecycle hooks like beforeCreated, created, and so forth, but it always triggers.

It's likely something simple to do, but I can't seem to figure it out and haven't found relevant information online (possibly using the wrong search terms).

Here's the code snippet:

import axios from "axios";

export default {
  name: 'Settings',

  data: () => ({
    /* initialize motionSensor as null */
    motionSensor: null
  }),
  mounted() {
    /* Fetch initial value from the backend, which unintentionally triggers the watcher */
    axios
      .get('http://localhost:8000/status.json')
      .then(response => {
        response.data['motionsensor'] ? this.motionSensor = "1" : this.motionSensor = "0";
      })
  },
  watch: {
    motionSensor: function(val) {
      alert('Motion sensor value is now: ' + val)
    }
  }
}

Answer №1

Make sure to utilize the previous value (oldVal) in the watch handler function:

watch: {
  motionSensor: function(val, oldVal) {
    if (oldVal !== null) {
      alert('The updated motion sensor value is: ' + val)
    }
  }
}

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

Issue with displaying props value at the beginning of a function in ReactJS render

But the this.props.NotesAll object retrieved from another component is displaying under the render() method. However, when I attempt to use this.props.NotesAll above the render in a function to manipulate the objects and check their values with console.log ...

What is the best way to determine if a page component is using a specific definePageMeta layout?

My application's page layout is now dynamic based on the current user. However, I want to verify if the current page has explicitly defined its layout to prevent it from being overridden by the watchEffect below. (app.vue) <template> <Nuxt ...

Verify if a selection of days using momentjs exceeds 7 days

Is there a way to determine if more than 7 days have been selected on the calendar? I need to disable a button based on this condition. fromDate and toDate are global variables where I store dates from the calendar. Feeling a little confused at the moment ...

Connect to Node-Red websocket server

My server is running node-red with embedded functionality. I am attempting to set up a new websocket listener on the server, but when I run the code provided, the websockets in my node-red application stop functioning properly. const WebSocket = require(& ...

Limit the elements in an array within a specified range of dates

Currently, I am working on implementing a filter functionality for a data array used in a LineChart within my Angular application using TypeScript. The structure of the data array is as follows: var multi = [ { "name": "test1", "series": [ ...

How can I use apps script to automatically remove old files from google drive that are over a month old?

Every week, I secure backups of my sheets to a backup folder using the following code. Now, I am looking for a way to automatically delete files older than 1 month from the backup folder. How can I add a script to accomplish this? Backup code (triggered w ...

Transmit information from a website to a server located nearby

Creating a home automation hub is my current project -- utilizing a Raspberry Pi as the foundation to display weather updates, control lighting, and more. This setup is connected to a website through a shared MongoDB database, with both systems running Nod ...

Unexpected behavior encountered when using TypeScript type declarations

I am currently working on a Gatsby side project incorporating Typescript for the first time. I initially expected Typescript to behave similarly to PHP type declarations, but I have encountered some unforeseen issues. Despite feeling confident in my Typesc ...

Having trouble with my AJAX request and can't figure out why. Anyone available to take a look and help out?

I have successfully implemented this AJAX script on various pages in the past without any issues. <script type="text/javascript" src="jquery-1.4.2.min.js"></script> <script type="text/javascript" src="jquery.validate.min.js"></script& ...

Leveraging D3.js in combination with Total.js and node.js

I have been attempting to utilize total.js in conjunction with D3 for creating a tree visualization. However, I am encountering issues when trying to download D3. This is what I do: npm install D3 Upon running the above command, I receive the following e ...

Step-by-step guide on saving an array to localStorage using AngularJS

Currently working on constructing a shopping cart. My goal is to include the array invoice in localstorage for future reference. I suspect there may be some flaws with this particular approach. angular.module('myApp', ['ngCookies']); ...

Using jQuery's toggle function with a double click event to change the display to none

A div I created has the ability to expand to full screen upon double click, and I now wish to implement a toggle function so it can return to its original size when double clicked again. Initially, the code successfully increased the size of the div. Howe ...

Execute a specialized function with imported modules and specified parameters

Within an npm project, I am looking to execute a custom function with arguments, or ideally provide it as a script in the package.json file like this: npm run custom-function "Hello, World". Currently, I have a file called src/myFunction.ts: import * as e ...

While attempting to troubleshoot a program with mocha using the --debug-brk flag, it turns out that the debugging process actually

After setting up an open source project, I found that the mocha tests are running successfully. However, I am facing a challenge when trying to debug the functions being called by these tests. Every time I attempt to debug using 'mocha --debug-brk&apo ...

Loading external templates in Angular2 with Webpack2

Attempting to integrate ngtemplate-loader in a project using AngularJs 2 and Webpack 2 is proving challenging. While this setup has been successful in Angular 1.x projects with Webpack 1.x, it encounters an error when running in the browser: Uncaught Type ...

Using jQuery to automatically scroll to the bottom of a div when sliding down

When a user clicks on a link to slide the div down, I want it to automatically scroll to the bottom of the div. I've attempted to use scrollTo and animate methods to achieve this effect. $('html, body').animate({ scrollTop: $("#elementID") ...

The alert message fails to appear during an Ajax request

I'm having trouble understanding why the Ajax function in this code snippet is not triggering the success or error functions: function get_cust_key(custid) { $.ajax({ type: "POST", url: 'http://localhost/Test/index.php/getCust ...

Contrasting when we call a watcher using parentheses versus omitting them

When working with the watch property, what is the distinction between invoking a property using parentheses () and not using them? export default { watch: { // syntax with () test() { if (this.test) { // perform some tasks } e ...

What is the best way to save the various canvas images within a division as a single png file?

Hey there, I currently have a setup with multiple canvas elements within a main division structured like this: <div id="main"> <canvas id="one"> <canvas id="two"> <div id="main_2"> <canvas id="three"> </div ...

Using Rails: How to invoke a function in the asset pipeline from a JS response?

In one of the JavaScript files I am working with, I have defined an object and a function: chosen.coffee Foo = do_this: -> $('.slider').slider() $ -> Foo.do_this() This code initializes JQueryUI to turn a specific div into a ...