Home > Back-end >  pass an argument from axios to a method vue
pass an argument from axios to a method vue

Time:10-27

I'm new to vue and I'm trying to make this work. I get some data from a XML, everything works, but I want to change which value I get from XML using a computed which gets a value from Store.

My computed is:

currentStep: {
  set (val) {
      this.$store.commit('setCurrentStep', val)
      
  },
  get () {
      return this.$store.state.currentStep
  }
}

With axios and xml2js I get all data with this Method:

getData() {
  axios.get("https://something.xml").then((response) => {
    this.parseXML(response.data).then((data) => {
      this.flightInformations = data

    })
  })
},
parseXML(data) {
  return new Promise((resolve) => {
    let parser = new xml2js.Parser({
      trim: true,
      explicitArray: true,
    });
    parser.parseString(data, function (err, result) {
      

     let obj = null
     obj = result.flugplan.abflug[0].flug;
      
      
      
      let flight_dates = {};
     
      for (let item of obj) {
        let flight_date = item.datum.join().toString();
        
        if (!flight_dates[flight_date]) {
          flight_dates[flight_date] = [];
        }
        
        flight_dates[flight_date].push({
          flightNr: item.flugnr.join().toString(),
          flightPlace: item.ort.join().toString(),
          flightPlan: item.plan.join().toString(),
          flightExpected: item.erwartet.join().toString(),
          flightDate: item.datum.join().toString(),
        })
      }
      resolve(flight_dates);
    })
  })
}

I need to change my OBJ using my computed like:

let obj = null

     if (this.currentStep === 'departures') {
      obj = result.flugplan.abflug[0].flug;
     } else {
      obj = result.flugplan.ankunft[0].flug;
     }

But it does not work. Can you guys please help ?

Thank you very much.

CodePudding user response:

Computed can only return some value instead of modifying anything. Try this one:

computed: {
  someData() {
    return this.currentStep === 'departures' ? result.flugplan.abflug[0].flug : result.flugplan.ankunft[0].flug;
  }
}

After that use a someData value:

const obj = this.someData

CodePudding user response:

I get it finally and now works! here is the code, if someone have the same issue

    getData() {
  axios.get("something.xml").then((response) => {
    this.parseXML(response.data).then((data) => {
      this.flightInformations = data
    })
    .catch(err => {
      console.log(`${err} data is not avaiable`)
    })
  })
},
parseXML(data) {
  return new Promise((resolve) => {
    let parser = new xml2js.Parser({
      trim: true,
      explicitArray: true,
    });
    parser.parseString(data, (err, result) => {
     let obj = null
     if (this.$store.state.currentStep === 'abflug') {
      obj = result.flugplan.abflug[0].flug
     } else {
      obj = result.flugplan.ankunft[0].flug
     }
      let flight_dates = {};
      for (let item of obj) {
        let flight_date = item.datum.join().toString();
        if (!flight_dates[flight_date]) {
          flight_dates[flight_date] = [];
        }
        flight_dates[flight_date].push({
          flightNr: item.flugnr.join().toString(),
          flightPlace: item.ort.join().toString(),
          flightPlan: item.plan.join().toString(),
          flightExpected: item.erwartet.join().toString(),
          flightDate: item.datum.join().toString()
        })
      } 
      resolve(flight_dates)
    })
  })
}

Now using Store, when I change my CurrentStep, it also changes which part of XML it reads.

  • Related