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)
    }
  }
});

Я также установил обработчик ошибок и параметры для запроса навигатора. Для отслеживания результатов, пожалуйста, проверьте консоль.

Другие вопросы по тегам