【问题标题】:VueJS button click executes only second clickVueJS 按钮单击仅执行第二次单击
【发布时间】:2021-10-29 07:27:23
【问题描述】:

我的网页中有“使用 facebook 登录”按钮。一切都按预期工作,但问题是在第二次点击时触发了该操作。 我可以在第一次单击时在控制台中看到错误。

HTML 代码:

 <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
                    <button type="button"  v-on:click="logInWithFacebook" class="btn-facebook"><i class="fa fa-facebook"></i>Facebook</button>
                </div>

JS 代码:

<script>

import axios from 'axios'

export default {

    name:"Login",
    data() {

        return {

            email:'',
            password:'',
            progress:false,
            disabled:false,
            emailError:null,
            passwordError:null,
            error:null,
            

        }

    },

    methods: {

async initFacebook() {
      window.fbAsyncInit = function() {
        window.FB.init({
          appId: "615100826501510", //You will need to change this
          cookie: true, // This is important, it's not enabled by default
          version: "v2.6"
        });
      };
    },
      async logInWithFacebook() {
      this.progress=true
      await this.loadFacebookSDK(document, "script", "facebook-jssdk");
      await this.initFacebook();
      window.FB.login(function(response) {
           if (response.status === 'connected'){

        window.FB.api('/me?fields=id,name,email', function(response) {
        console.log( response) // it will not be null ;)
        this.progress = false

    })
          
        } else {
          alert("User cancelled login or did not fully authorize.");
        }
      },
      {scope: 'public_profile,email'}
      );
      return false;
    },
    async loadFacebookSDK(d, s, id) {
      var js,
        fjs = d.getElementsByTagName(s)[0];
      if (d.getElementById(id)) {
        return;
      }
      js = d.createElement(s);
      js.id = id;
      js.src = "https://connect.facebook.net/en_US/sdk.js";
      fjs.parentNode.insertBefore(js, fjs);
    }

    }
      


控制台错误:

vue.runtime.esm.js?2b0e:1897 TypeError: Cannot read properties of undefined (reading 'login')

我在第一次单击时收到此控制台错误,而第二次则正常。我认为错误发生在第一次点击时。

window.FB.login(function(response) {

【问题讨论】:

  • 你应该首先阅读更多关于 async/await 如何工作的内容。例如:loadFacebookSDKinitFacebook 不是异步的,因为它们不在其函数体内使用 await。马歇尔的答案是正确的。由于initFacebook 不是异步的,它同步完成,logInWithFacebook 在 Facebook 没有完成加载的情况下继续。

标签: javascript vue.js


【解决方案1】:

我认为这是因为在第一次点击时,window.FB.login 会比this.initFacebook 执行得更快

【讨论】:

  • 我们能做些什么?
  • 我觉得你可以在Chrome的开发者工具中选择Network,然后检查SDK是否加载,然后使用断点调试检查初始化是否完成
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多