Я получаю данные с помощью;

data() {
    return {
      staffs: "",
      salaries:0,
loading:true,
    };
  },

methods: {
    async getStaffs() {
      const result = await axios.get(
        "/api/staffs/"
      );
      this.staffs = result.data
this.loading = false

    },

    totalSalary(){
 

    for(var i = 0 ;i++;i<this.staffs.length){
this.salaries += this.staffs[i].job.salary

    }




  },


  mounted() {
    
       this.getStaffs()
       this.totalSalary()


  },

Я хочу рассчитать общую зарплату после получения данных и отобразить их как

<span >Total Salary: {{salaries}}</span>

Как правильно это делать? Я не хочу использовать тайм-аут или что-то подобное.

1
Emre Özer 21 Янв 2021 в 11:21

2 ответа

Лучший ответ

Вы можете просто использовать async/await в своем крючке mounted

data() {
    return {
      staffs: "",
      salaries:0,
      loading:true,
    };
  },

methods: {
    async getStaffs() {
      const result = await axios.get(
        "/api/staffs/"
      );
      this.staffs = result.data
      this.loading = false
    },
    totalSalary(){
      for(var i = 0 ;i++;i<this.staffs.length){
        this.salaries += this.staffs[i].job.salary
      }
  },


  async mounted() {
       await this.getStaffs() // wait for getStafss to finish executing
       this.totalSalary()
  },

Однако в вашем случае я бы рекомендовал использовать опору computed для вычисления totalSalary

0
Hoang Do 21 Янв 2021 в 08:44

Как вы делаете сейчас, вы передаете весь запрос в константу result вместо ответа запроса, вы должны назначить ответ изнутри метода .then().

Посмотрите этот пример из документации Axios:

     // Make a request for a user with a given ID
axios.get('/user?ID=12345')
  .then(function (response) {
    // handle success
    console.log(response);
  })
  .catch(function (error) {
    // handle error
    console.log(error);
  })
  .then(function () {
    // always executed
  });

Вы также можете найти дополнительную информацию и рабочие примеры там: https://github.com/axios/axios

0
Osmar Matos 21 Янв 2021 в 08:34
65823472