I'd send $cities to a js variable and load that into vue and let vue handle everything:
<script>
new Vue({
el: '#cities',
template: '#cityTemplate',
data: {
city: null,
citys: {!! json_encode($cities) !!}}
},
methods: {
fetch4Data: function(city) {
this.$http.get('api/city?city=' + city).then((response) => {
this.city = response.body;
}, (response) => {
// error callback
});
}
</script>
// HTML part
<div id="cities">
<ul>
<li v-for="city in cities">
<a @click="fetch4City(city.name)">@{{ city.name}}</a>
</ul>
<div v-show="city"> <======== will only show up when you have clicked on a city, and it will change whenever you choose a different city
// add city details here (city.name, city.population_count etc)
</div>
</div>