Vue JS. Поля данных не являются обязательными
У меня есть следующее определение для элемента Vue:
new Vue({
el: "#app",
data: {
latitude1: 'a',
name: 'aa'
},
mounted() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(position => {
this.latitude1 = position.coords.latitude;
})
} else {
this.latitude1 = "WTF??"
// this doesn't work either:
// this.$nextTick(() => { this.latitude1 = "WTF??" })
}
},
methods: {
// button works... WTF?!?
doIt() {
this.latitude1 = "WTF??"
}
}
});
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<div id="app">
<div>{{ latitude1 }}: {{ name }}</div>
<button @click="doIt">Do it</button>
</div>
Я могу видеть данные о местоположении, которые заполняются. Предупреждение отображает широту, но двусторонняя привязка для поля данных latitude1 не работает. Я попытался сохранить состояние объекта, используя это, и это также не сработало.
Мой HTML-код выглядит следующим образом:
<div class="form-group" id="app">
<p>
{{latitude1}}
</p>
</div>
1 ответ
Решение
Одна из вещей, которую нужно сделать внутри Vue.js, - использовать определенные методы для изменения реактивных свойств.
Вот код, который я предоставил для этого:
function error(err) {
console.warn(`ERROR(${err.code}): ${err.message}`);
}
var options = {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
};
new Vue({
el: "#app",
data: {
latitude1: 'a',
name: 'aa'
},
mounted: function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(position => {
console.log(position.coords.latitude);
Vue.set(this, 'latitude1', position.coords.latitude);
}, error, options)
}
}
});
Я также установил обработчик ошибок и параметры для запроса навигатора. Для отслеживания результатов, пожалуйста, проверьте консоль.