Невозможно установить свойство undefined в функции - PullRequest
0 голосов
/ 11 сентября 2018

Я настраиваю сообщения об ошибках на странице входа расширения, используя vue, и имею ошибку в функции importCreds().

data(){
    return {
    url:'',
    apikey:'',
    error:'',
    }
},
methods:{
    accountSummaryButton(){
        if (localStorage.getItem("accounts") == null)
            this.error = 'There are no available accounts.';
        }
        else
            // STUFF
    },
    saveLogin(event){
        let app = this;
        if (!app.getAccountData(app.url,app.apikey,this.method))
            this.error = 'An error has occurred, please check Url and API Key.';
        else {
            //STUFF
        }
    },
    importCreds(){
        let app = this;
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
            chrome.tabs.sendMessage(
                tabs[0].id,
                {action: "import_creds"},
                function(response) {
                    if (response){
                        app.url = response.affiliateurl
                        app.apikey = response.apikey
                    } else
                        this.error = 'Go to your affiliate site.';
                }
            );
        });
    },
},

Я пропускаю простой способ доступа к error в этомфункционировать?

1 Ответ

0 голосов
/ 11 сентября 2018

importCreds по-прежнему ссылается на исходный this, однако chrome.tabs.query({}, function(tabs) {}) - нет. Вы можете сохранить эту ссылку, назначив this переменной e.g. (let app = this), а затем используйте app.error.

data () {
    return {
      url: '',
      apikey: '',
      error: '',
    }
},
methods: {
    accountSummaryButton () {
        if (localStorage.getItem("accounts") == null) {
            this.error = 'There are no available accounts.';
        } else {
            // STUFF
        }
    },
    saveLogin (event) {
        let app = this;

        if (!app.getAccountData(app.url,app.apikey,this.method)) {
            this.error = 'An error has occured, please check Url and API Key.';
        } else {
            // STUFF
        }
    },
    importCreds () {
        let app = this;

        chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
            chrome.tabs.sendMessage(
                tabs[0].id,
                { action: "import_creds" },
                function(response) {
                    if (response) {
                        app.url = response.affiliateurl
                        app.apikey = response.apikey
                    } else {
                        app.error = 'Go to your affiliate site.';
                    }
                }
            );
        });
    },
},
...