Метод Vue не работает из другого метода - PullRequest
0 голосов
/ 12 ноября 2018

У меня ошибка вызова метода Vue, когда я пытаюсь вызвать метод из другого метода приложения:

JS:

const app = new Vue({
el: '#info',
data() {
    return {
        position: {},
        areas: {}
    };
},
ready() {
},

mounted() {
},
methods: {
    prepareComponent(){

    },
    loadContent(){
        console.log(this.position);
        let queryString = '?lat='+this.position.coords.latitude+'&lon='+this.position.coords.longitude;
        axios.get('/api/getarea'+queryString)
            .then(response => {
                this.areas = response.data;
                this.showAreaData();
            });
    },
    showAreaData(){
        var cities = [];
        for(var area of this.areas){
            cities.push(area.city);
        }
        console.log(cities);
    },
    getLocation(){
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(function(position) {
                this.position = position;
                this.loadContent();
            }, function(error) {
                console.log(error);
            });
        }
    },
},
});

и вот HTML:

            <div id="info">
                <a href="#" id="getPosition" class="btn btn-link" @click="getLocation">Get Position</a>
                <ul>

                </ul>
            </div>

После выполнения кода я получил сообщение об ошибке, что loadContent не определен (TypeError: this.loadContent не является функцией). Что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

this относится к объекту, который вызвал функцию.В данном случае это navigator.geolocation.Вы можете переопределить вызывающий объект, вызвав bind для функции:

getLocation(){
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position) {
            this.position = position;
            this.loadContent();
        }.bind(this), function(error) {
            console.log(error);
        });
    }
}
0 голосов
/ 12 ноября 2018

попробуйте добавить var _this= this; использовать _this.loadContent(); или используйте app.loadContent();

getLocation(){
 var _this= this;
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(function(position) {
                this.position = position;
                _this.loadContent();
            }, function(error) {
                console.log(error);
            });
        }
    },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...