- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在想办法如何管理在我的应用程序中实现谷歌地图自动完成后遇到的这个错误。我的maps.ts 文件看起来像;
import { Component, NgZone } from "@angular/core";
import {AlertController, NavController, Platform, NavParams,ModalController } from 'ionic-angular';
import { GoogleMap, GoogleMapsEvent, GoogleMapsLatLng, GoogleMapsMarkerOptions, CameraPosition } from 'ionic-native';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { Geolocation } from 'ionic-native';
declare var google:any;
declare var window: any;
import {MapsAPILoader} from 'angular2-google-maps/core';
import { ConnectivityService } from '../../providers/connectivity-service';
@Component({
selector: 'maps-page',
templateUrl: 'maps.html'
})
export class MapsPage {
map: any;
firstTime : boolean = true;
isDisplayOfflineMode : boolean = false;
//private map: GoogleMap;
constructor(private _navController: NavController,
private zone: NgZone,
private _loader : MapsAPILoader,
private connectivityService:ConnectivityService,
private platform: Platform,
public navParams: NavParams,
public modalCtrl:ModalController,
private alert : AlertController,
private _zone: NgZone) {
this.platform.ready().then(() => this.onPlatformReady());
this.map = {
lat: 0,
lng: 0,
zoom: 15
};
this.platform.ready().then(() => this.onPlatformReady());
this.NetworkConnectivity();
}
private onPlatformReady(): void {
}
ngAfterViewInit() {
GoogleMap.isAvailable().then(() => {
this.map = new GoogleMap('map_canvas');
this.map.one(GoogleMapsEvent.MAP_READY).then((data: any) => {
this._zone.run(() => {
let myPosition = new GoogleMapsLatLng(45.495586, -73.574709);
let position: CameraPosition = {
target: myPosition,
zoom: 15
};
console.log("My position is", myPosition);
this.map.moveCamera(position);
});
});
});
}
submit() {
let that = this;
this.map.getCameraPosition().then(res => {
let callback = that.navParams.get("callback")
callback(res.target).then(() => {
this._navController.pop();
});
})
}
dismiss() {
this._navController.pop()
}
NetworkConnectivity(){
setInterval(() => {
if(this.connectivityService.isOnline()){
if (this.firstTime)
{
this.loadMap();
this.autocomplete()
}
} else {
if(!this.isDisplayOfflineMode)
this.displayOffline();
}
}, 2000);
}
displayOffline() {
this.isDisplayOfflineMode = true;
let alert = this.alert.create({
title: 'Network connectivity',
subTitle: 'Offline',
buttons: [{
text : 'Retry',
handler: () => {
this.isDisplayOfflineMode = false;
}
}]
});
alert.present();
}
autocomplete() {
this._loader.load().then(() => {
let autocomplete = new google.maps.places.Autocomplete( document.getElementById('autocomplete').getElementsByTagName('input')[0], {});
google.maps.event.addListener(autocomplete, 'place_changed', () => {
let place = autocomplete.getPlace();
this.map.lat = place.geometry.location.lat();
this.map.lng = place.geometry.location.lng();
console.log(place);
});
});
}
loadMap(){
Geolocation.getCurrentPosition().then((position) => {
this.map = {
lat: position.coords.latitude,
lng: position.coords.longitude,
zoom: 15
};
this.firstTime = false;
}, (err) => {
});
}
getDirections() {
window.location = `geo:${this.map.lat},${this.map.lng};u=35`;
}
}
我的 html 文件看起来像;
<ion-header>
<ion-toolbar>
<ion-title>
{{'SEARCHFORM.SELECT' | translate}}
</ion-title>
<ion-buttons start>
<button ion-button (click)="dismiss()">
<span ion-text color="primary" showWhen="ios">{{'SEARCHFORM.CANCEL' | translate}}</span>
<ion-icon name="md-close" showWhen="android,windows"></ion-icon>
</button>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-fab left bottom>
<button ion-fab class="fab-map" (click)="getDirections()">
<ion-icon name="navigate"></ion-icon>
</button>
</ion-fab>
<ion-item>
<ion-input id="autocomplete" type="text" name="title" placeholder="Enter Address"></ion-input>
</ion-item>
<sebm-google-map id="map" [latitude]="map.lat" [longitude]="map.lng" [zoom]="map.zoom" >
<sebm-google-map-marker [latitude]="map.lat" [longitude]="map.lng">
<sebm-google-map-info-window>
<strong>My location</strong>
</sebm-google-map-info-window>
</sebm-google-map-marker>
</sebm-google-map>
<div style="height: 100%;" id="map_canvas"></div>
</ion-content>
<ion-footer>
<button ion-button (click)="submit()">{{'SEARCHFORM.SUBMIT' | translate}}</button>
</ion-footer>
在我实现谷歌地图自动完成功能之前, map 工作得很好,但现在每当我点击屏幕上的任何地方,它就会崩溃。有谁知道如果有人经历过它为什么会发生以及可能的解决方案是什么?我的 html 文件看起来不错吗?或者还有其他什么问题。非常感谢!!
最佳答案
使用 @ViewChild
和 ElementRef
,而不是 document.getElementById('autocomplete').getElementsByTagName('input')[0]
在 Angular/Ionic 2 中获取 htmlelements。
import {ViewChild,ElementRef} from '@angular/core';
@Component({
selector: 'maps-page',
templateUrl: 'maps.html'
})
export class MapsPage {
@ViewChild('autocomp')
aComplete:ElementRef;
//...
autocomplete() {
this._loader.load().then(() => {
let autocomplete = new google.maps.places.Autocomplete(this.aComplete.nativeElement.querySelector('input'));
您需要使用querySelector
,因为ionic将html元素封装在ion-input
中。检查this answer
在您的 html 中使用 #autocomp
作为元素的 id。
<ion-input #autocomp id="autocomplete" type="text" name="title" placeholder="Enter Address"></ion-input>
引用:ElementRef , ViewChild
关于javascript - 在 Ionic 2 中点击 google map 时出现 "Uncaught TypeError: ele.hasAttribute is not a function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43302181/
我尝试找出 的数量使用 JavaScript 在 HTML 文件中添加没有“style”属性的元素。 我的解决方案:找出 的编号标记为“imgCount”,然后获取 的数量“style”属性为“
我对编程还很陌生,所以如果这看起来是一个简单的问题,我应该知道答案,所以很抱歉。 我基本上想监听用户在特定div(文章标题)上的点击,并检查该类是否有属性(值= 1)。-我实际上将代码中其他地方的 d
我目前在我的表单上使用 jQuery 验证器,提交表单时,无论选中还是未选中,验证器上的 checked 属性似乎都没有更改。 这是我的 HTML:
有没有一种原生方法(没有 jQuery)来检查 dom 元素是否具有具有所选值的属性。例如: //assume doc has data-mod="do" defined 这将是真的: documen
我正在尝试从给定元素“向上”遍历 DOM 节点,以获取具有“动画”属性的第一个父元素。 var el = evt.target; console.log(el); while (!el.has
我用过 element.hasAttribute('id') 在我的代码中测试元素是否具有属性 id。但是 hasAttribute API 仅与 IE8 之后的浏览器兼容。是否有类似的 API 或技
我遇到了一些试图使用 hasOwnProperty 访问 html 属性的 jquery 代码。 var e = $element.find('input')[0]; if(!e.
我正在编写一个悬停脚本。基本上,我创建一个 div,将鼠标悬停在特定项目(在本例中为按钮)上时放入聊天框容器中,并在聊天框中显示一些文本。移除鼠标悬停后,文本将会消失。 我还没有完全了解消失部分,但这
我在我的 Nodejs 脚本中使用函数 hasAttribute 来检查它是否存在。 var DOMParser = require('xmldom').DOMParser;
目前我正在为我的网站开发自定义工具提示。这是一个很重的页面,所以它在每一页上都有大约 300 个带有标题的元素。它与这段代码配合得很好: var title=""; $( document ).del
我对使用 C# 的 XML 类还比较陌生。我什至无法让 XML 阅读器识别出我传递给它的字符串是 XML。这是我用来测试基本 Xml 阅读的单元测试 [TestFixture()] public cl
在指令中,我想在对元素执行某些函数之前检查它是否具有属性。但我在 jqLite docs 中没有看到为此做的任何事情. 例如: .directive('noReadonly', function()
我正在制作一个创建倒计时的自定义元素程序。我有 2 个正在使用的自定义属性 - “ed”和“cd-type”。 我已经尝试通过 JavaScript 验证器发送它并修复了一些错误。我还尝试在构造函数中
我正在使用 script from the W3C创建可访问的选项卡面板。当我用脚本加载页面时,出现错误 Uncaught TypeError: Cannot read property 'hasAt
我正在尝试检查按钮是否具有名称属性。以下行给出了正确的结果。 alert(course_view_buttons[30].hasAttribute("name")); 但是下面的代码给出了这样的错误-
我需要使现有的 Web 应用程序与 IE7 兼容。 该代码广泛使用了 element.hasAttribute,而 IE7 对此方法存在问题。 Object doesn't support prope
本文整理了Java中com.google.gwt.uibinder.rebind.XMLElement.hasAttribute()方法的一些代码示例,展示了XMLElement.hasAttribu
我修改了一些在这里找到的爬虫,一切正常,但是我遇到了一些问题。第一个是 fatal error :在 null 上调用成员函数 hasAttribute()。我怎样才能解决这个问题?第一条记录总是生成
我正在从事一个项目,该项目要求我在单独的数据库中构建游戏的房间、元素和 NPC。我选择了 XML,但有些东西阻止我在我的 C# 代码中正确解析 XML。我做错了什么? 我的错误是: System.xm
我一直在想办法如何管理在我的应用程序中实现谷歌地图自动完成后遇到的这个错误。我的maps.ts 文件看起来像; import { Component, NgZone } from "@angular/
我是一名优秀的程序员,十分优秀!