当前位置: 首页 > 知识库问答 >
问题:

如何在按钮@click[VUE JS]上连续调用函数

蒋奕
2023-03-14

我在@Click上调用了3个函数,我是这样做的:

<CButton
  @click=" getBillPrice();
           updateBill();
           postData();"
  type="submit"
  color="primary">Save</CButton>

首先调用getBillPrice(),然后调用updateBill(),然后调用postData(),这一点很重要。但是这些函数的运行顺序是错误的,首先是updateBillPrice,然后是postData(),然后是getBillPrice()

我该如何修复它?以下是我的一些功能。这是文本可以发布这么多代码,您可以直接跳过此文本:Lorem ipsum dolor sit amet,consecetur adipiscing elit,ed do eiusmod temor的附带性ut labore et dolore magna aliqua。Ut enim ad minim veniam,quis nostrud练习ullamco labis nisi ut aliquip ex ea commodo的结果。Duis aute irure dolor in reguenderit in volptate velit esse curum dolore eu fugiat nulla pariatur。例外情况下,非证明,在过错中,必须承担责任。

getBillPrice() {
  if (this.data.billid.trim() == "Please Select") {
    return;
  }
  /*getting data from bill*/
  axios
    .get(this.APIServer + "bills/" + this.data.billid, {
      headers: { Authorization: this.$store.state.token },
    })
    .then((response) => {
      if (response.status === 200) {
        this.data.billPrice = response.data.netPrice;
        this.data.billTaxClass = response.data.taxClass;
        this.data.billPriceTotal = response.data.totalPrice;
        console.log("got the get");
      }
    })
    .catch((e) => {
      console.log("API failed");
      console.log(e);
    });
  /*END________*/
},


updateBill() {
  if (
    this.data.amount.trim() == "" ||
    this.data.price.trim() == "" ||
    this.data.title.trim() == "" ||
    this.data.billid.trim() == "Please Select"
  ) {
    return;
  }
  /*Update bill query */
  let updateData = {
    netPrice: Number(this.data.billPrice) + Number(this.data.totalPrice),
    totalPrice:
      (Number(this.data.billPrice) + Number(this.data.totalPrice)) *
        Number(this.data.taxClass) +
      (Number(this.data.billPrice) + Number(this.data.totalPrice)),
  };
  axios
    .patch(this.APIServer + "bills/" + this.data.billid, updateData, {
      headers: { Authorization: this.$store.state.token },
    })
    .then((response) => {
      if (response.status === 200) {
        console.log("bill updated");
      }
    })
    .catch((e) => {
      console.log("API failed");
      console.log(e);
    });
  /*END________*/
},


postData() {
      if (
        this.data.amount.trim() == "" ||
        this.data.price.trim() == "" ||
        this.data.title.trim() == "" ||
        this.data.billid.trim() == "Please Select"
      ) {
        return;
      }

      /*Post item */
      let postData = {
        amount: Number(this.data.amount),
        bill: {
          id: this.data.billid,
        },
        price: Number(this.data.price),
        title: this.data.title,
        totalPrice: Number(this.data.totalPrice),
      };
      axios
        .post(this.APIServer + "items", postData, {
          headers: { Authorization: this.$store.state.token },
        })
        .then((response) => {
          if (response.status === 201) {
            console.log("item posted");
            this.move("/items");
          }
        })
        .catch((e) => {
          console.log("API failed");
          console.log(e);
        });
      /*END________*/
    },

共有1个答案

吕飞翼
2023-03-14

我认为,与其将每个函数都放在click事件上,不如创建一个函数来触发这些函数。

<CButton
  @click="onSubmit"
  color="primary">Save</CButton>
methods: {
  onSubmit(){
    this.getBillPrice();
    this.updateBill();
    this.postData()
  },
  ...
}

如果您的函数是异步的,那么您可以使用异步等待和try catch

methods: {
  async onSubmit(){
    try{
      await this.getBillPrice();
      await this.updateBill();
      this.postData()
    } catch(err){
      // Handle error.
    }

  },
  ...
}

因为您的项目中似乎不支持async await,所以您可以试试这个。(我在then catch方面没有那么多经验,但它应该有用)

methods: {
  onSubmit(){
    this.getBillPrice()
    .then(() => {
       return this.updateBill()
    })
    .then(() => {
       return this.postData()
    })
    .then(() => {
       // Any other code if needed
    })
    .catch((err) => {
       // Handle error scenario
    })

  },
  ...
}
 类似资料:
  • 问题内容: 我正在使用Sprite Kit制作游戏,并且当您按住向左/向右移动按钮时,我希望角色在屏幕上移动。问题在于他仅在轻按按钮时才移动,而没有保持住。我到处都在寻找解决方案,但似乎无济于事! 这是我的代码; 在我的游戏场景中… 问题答案: 您知道什么时候触摸了按钮,因为它被调用了。然后,您必须设置一个标志以指示按钮被按下。 在中,调用标记为true的函数: 您可以在调用该按钮时将标志设置为f

  • 问题内容: 在有人对我进行抨击或将其标记下来之前,我已经遍及整个互联网,以查找如何执行此操作(包括关于stackoverflow的相同问题)。我是新手,而且我发现很难学习新概念,所以请对我轻松一点。 我想做的是单击按钮时调用php脚本/函数。如果有帮助,我可以在WAMP中运行它。这是我的代码: the_script.php中包含以下内容: 为什么这不起作用?我听说按钮是客户端等,而PHP是服务器端

  • 问题内容: 我正在尝试编写Django应用程序,而我却被困在单击按钮时如何调用视图函数。 在我的模板中,我有一个如下所示的链接按钮,单击该按钮会将您带到另一个网页: 单击按钮时,我还想调用Django视图函数(以及重定向到目标网站)。查看功能使数据库中的值增加,该值存储了单击按钮的次数。 该是到外部网站(如链接 www.google.com )。现在,单击该按钮时,它将打开一个新窗口,该窗口将您带

  • 问题内容: 我创建了一个名为functioncalling.php的页面,其中包含两个按钮 Submit 和 Insert 。作为PHP的初学者,我想测试单击按钮时执行的功能。我希望输出出现在同一页面上。因此,我创建了两个功能,每个按钮一个。functioncalling.php的源代码如下: 这里的问题是单击任何按钮后都没有输出。 我到底哪里出问题了? 问题答案: 是的,您在这里需要Ajax。请

  • 问题内容: 昨天我发布了一个问题,关于必须按下两次按钮才能使其正常工作。我得到了很好的帮助,这是stackoverflow的标志,但是问题仍然存在。我将代码缩减到最低限度,问题仍然存在。我仔细阅读了BalusC的建议,希望能在表单内找到表单。我当然看不到任何东西,所以我将发布我的代码,以希望更多的眼睛看到一些东西。 我有一个模板,可以从“欢迎”(登录部分)中调用。这将转到具有命令按钮的userIn

  • 问题内容: 我是python和Flask的新手。我有一个带按钮的Flask Web App。当我单击按钮时,我想执行python方法而不是Javascript方法。我怎样才能做到这一点? 我看过python的示例,它使用这样的表单标签将我重定向到新页面 但我不希望它将我重定向到新页面。我只希望它执行python方法。 我正在为Raspberry Pi机器人汽车制作这个。当我按下前进按钮时,我希望它