У меня есть многомерный поток отдельных событий в формате JSON, каждый из которых имеет разные даты и места.Каждая дата в указанном событии включает в себя широту и долготу, которые я вычисляю, используя геолокацию HTML5.Я хочу вставить это расстояние в дочерний объект и сортировать не только по расстоянию, но и сортировать события по расстоянию каждой даты, сохраняемой в сгруппированном виде.
Я пробовал сортировать в строке, используя v-for, но у меня естьтак как узнал, что это не работает в vue2 и не решает проблему сортировки родительских событий.Ниже приведен пример того, над чем я работаю:
HTML:
<div id="string">
<p><strong>Current Geolocation:</strong> {{lat}}:{{lon}}</p>
<ol v-for="seminar in seminars">
<li>
{{seminar.title}}
<ul>
<li v-for="event in seminar.events">
{{event.webtitle}} <strong>{{calcDist(lat,lon,event.location.lat,event.location.lon,N)}} Miles Away</strong>
</li>
</ul>
</li>
</ol>
</div>
Методы:
methods: {
getLocation: function () {
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(this.showPosition, this.errorCallback);
} else {
this.error = "Geolocation is not supported.";
}
},
showPosition: function (position) {
this.lat = position.coords.latitude;
this.lon = position.coords.longitude;
this.googleQuery(position.coords.latitude, position.coords.longitude);
},
calcDist: function (lat1, lon1, lat2, lon2, unit) {
if ((lat1 == lat2) && (lon1 == lon2)) {
return 0;
} else {
var radlat1 = Math.PI * lat1/180;
var radlat2 = Math.PI * lat2/180;
var theta = lon1-lon2;
var radtheta = Math.PI * theta/180;
var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
if (dist > 1) {
dist = 1;
}
dist = Math.acos(dist);
dist = dist * 180/Math.PI;
dist = dist * 60 * 1.1515;
if (unit=="K") { dist = dist * 1.609344 }
if (unit=="N") { dist = dist * 0.8684 }
return Math.round(dist);
}
}
},
beforeMount() {
this.getLocation();
}
Пример JSFiddle со структурой данныхи текущий прогресс