【发布时间】:2019-02-01 12:44:20
【问题描述】:
尝试在 Vue 组件中实现谷歌地图。但是过得很艰难。实际上,没有错误。但也没有地图 :) 好吧,我在下面尝试过。
在 laravel Blade 中,我设置了我的 api。
<script async defer src="https://maps.googleapis.com/maps/api/js?key={{env('GOOGLE_MAPS_API')}}&callback=initMap"></script>
然后在Vue组件中;
data() {
return {
mapName: "map",
//some other codes
}
},
mounted() {
this.fetchEstates();
},
methods: {
fetchEstates(page = 1) {
axios.get('/ajax', {
params: {
page
}}).then((response) => {
// console.log(response);
this.estates = response.data.data;
//some other codes....
//some other codes....
},
computed: {
//some other functions in computed...
//
initMap: function(){
var options =
{
zoom : 6,
center : {
lat:34.652500,
lng:135.506302
}
};
var map = new google.maps.Map(document.getElementById(this.mapName), options);
var marker = new google.maps.Marker({
map: map,
icon: 'imgs/marker.png',
url: "/pages/estates.id",
label: {
text: this.estates.price,
color: "#fff",
},
position: {
lat: this.estates.lat,
lng: this.estates.lng
}
});
google.maps.event.addListener(marker, 'click', function () {
window.location.href = this.url;
});
}
<div id="map"></div>
最后一个标记url id 绑定在这样的控制器中,
public function details($id)
{
$estates = allestates::where('id', $id)->first();
return view('pages.details', compact('estates'));
}
我在 Vue js 中遗漏了什么吗?谢谢!
【问题讨论】:
-
在这种情况下,您可能错误地使用了
computed。我猜你想在安装组件时执行initMap()?如果您从未在模板中引用initMap,则永远不会评估计算的属性。另外,无论如何你都会返回 void,这不是计算属性应该开始的。 -
你试过现有的包吗?
-
实际上,正在尝试制作自定义地图,@GabMic
-
@Terry 你能再检查一下吗,我更新了问题和代码。
-
检查您的控制台日志。它说什么?
标签: javascript vue.js vuejs2