未捕获的TypeError:无法读取属性' zIndex' Ionic中未定义的(AngularJS)

时间:2016-04-13 11:24:22

标签: javascript angularjs google-maps google-maps-api-3 ionic-framework

感谢您收看此问题。

我正在为我所居住的城市做一个离子应用程序。它使用谷歌地图显示与城市相关的一些信息。此外,我想将自定义控件放到地图上,以显示不同类型的标记,这些标记是公共汽车站或医院等服务。问题是我无法解决这个错误:"未捕获的TypeError:无法读取属性' zIndex'未定义"我已经尝试了这个问题的大多数其他答案。

我试图在我的应用程序的控制器中添加元素(我认为Legend是它的名字),就像这样:

var controlesDiv = document.createElement('DIV');
var controles = new CrearLeyenda(controlesDiv, map);
controlesDiv.index = 4;
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(controles);

然后,在控制器外面,我有 CrearLeyenda 功能:

function CrearLeyenda(controlesDiv, map) {
controlesDiv.style.padding = '5px 0px';
var controlesUI = document.createElement('DIV');
controlesUI.style.backgroundColor = 'white';
controlesUI.style.borderStyle = 'solid';
controlesUI.style.borderWidth = '1px';
controlesUI.style.borderColor = 'gray';
controlesUI.style.boxShadow = 'rgba(0, 0, 0, 0.398438) 0px 2px 4px';
controlesUI.style.cursor = 'pointer';
controlesUI.style.textAlign = 'center';
controlesUI.title = 'Click to see Churches';
controlesDiv.appendChild(controlesUI);
var controlesText = document.createElement('DIV');
controlesText.style.fontFamily = 'Arial,sans-serif';
controlesText.style.fontSize = '13px';
controlesText.style.padding = '1px 6px';
controlesText.style.fontWeight = 'bold';
controlesText.innerHTML = 'Controles';
controlesUI.appendChild(controlesText);

google.maps.event.addDomListener(controlesUI, 'click', function () {
    alert("clicked");

    if (controlesText.style.fontWeight == 'bold') {
        controlesText.style.fontWeight = 'normal';
    } else {
        controlesText.style.fontWeight = 'bold';
    }
});

google.maps.event.addDomListener(controlesUI, 'mouseover', function () {
    controlesUI.style.backgroundColor = '#e8e8e8';
});

google.maps.event.addDomListener(controlesUI, 'mouseout', function () {
    controlesUI.style.backgroundColor = 'white';
});}

我希望你能帮助我,对不起我的英语,如果你需要更多适应症,我会尽力解释。

提前致谢

2 个答案:

答案 0 :(得分:1)

您正在调用它,就像它是返回对象的类构造函数一样:

var controles = new CrearLeyenda(controlesDiv, map);

然而,CrearLeyenda功能似乎并没有做那样的事情。所以controles变量此时为NULL。在此之后尝试添加console.log(controles);并查看。

我认为您需要将其添加到CrearLeyenda函数的末尾:

return controlesUI;

并改变你如何称呼它:

var controles = CrearLeyenda(controlesDiv, map);

答案 1 :(得分:0)

您只需将map.controls[google.maps.ControlPosition.TOP_RIGHT].push(controles);更改为map.controls[google.maps.ControlPosition.TOP_RIGHT].push(controlesDiv);即可解决问题。似乎其他代码没问题,或者至少是谷歌地图文档推荐的代码:https://developers.google.com/maps/documentation/javascript/examples/control-custom

感谢邓肯

发现了这一点