2016-07-28 40 views
1

OLY3をIonic 2アプリケーションに統合するために、このトピックの解決策(Ionic 2 Beta and Open Layers 3 not loading map 3)に従ったが、問題がある。私が奉仕すると、地図はロードされますが、それは視覚的に空です。ブラウザを表示させるためにブラウザのサイズを変更する必要があります。だから私はそれがリフレッシュの問題だと思っています... 私はイオニックとアングルで新しいので、ここにいます:)。何か手掛かりはありますか?ありがとう!OpenLayers 3&Ionic 2、読み込み後に表示されない

map.component.ts

import {Component, ViewChild, Renderer} from '@angular/core'; 
declare var ol: any; 
@Component({ 
    selector: 'olmap', 
    template: '<div id="map" #map class="full-map" data-tap-disabled="true"></div>' 
}) 
export class OLMap { 
    @ViewChild('map') map; 
    constructor(public renderer: Renderer) { 
    } 
    ngAfterViewInit() { 
    var layer = new ol.layer.Tile({ 
     source: new ol.source.OSM() 
     }); 
     var london = ol.proj.transform([-0.12755, 51.507222], 'EPSG:4326', 'EPSG:3857'); 
     var view = new ol.View({ 
     center: london, 
     zoom: 6 
     }); 
     var map = new ol.Map({ 
     target: 'map', 
     layers: [layer], 
     view: view 
     }); 
    } 
} 

home.ts

import {Page} from 'ionic-angular'; 
import {OLMap} from './component/map.component'; 

@Page({ 
    templateUrl: 'build/pages/home/home.html', 
    directives: [OLMap] 
}) 

export class HomePage { 
    constructor() { 

    } 
} 

home.html

<ion-header> 
    <ion-navbar> 
    <ion-title> 
     Ionic Test 
    </ion-title> 
    </ion-navbar> 
</ion-header> 

<ion-content> 
    <olmap></olmap> 
</ion-content> 

そして、私のindex.htmlに

<script src="http://openlayers.org/en/v3.17.1/build/ol.js" type="text/javascript"></script> 
<link type="text/css" href="https://openlayersbook.github.io/openlayers_book_samples/assets/ol3/css/ol.css" rel="stylesheet"> 
<link type="text/css" href="https://openlayersbook.github.io/openlayers_book_samples/assets/css/samples.css" rel="stylesheet"> 
+0

あなたのマップを作成した後、あなたは私達にあなたのコードの詳細を与えることができますか?ありがとう! –

+0

確かに@ThierryTemplier!完了しました。 – Xav

+0

@ThierryTemplier setTimeout(function(){window.dispatchEvent(new Event( "resize"));}、100);を追加しました。 ngAfterViewInit()の最後に。しかし、私はそれが少し汚れていると思います...そして、それはモバイル(IonicView)で動作しません! – Xav

答えて

0

私はそれが変化の検出の問題だと思います。おそらく、あなたはメソッドのChangeDetectorRefクラスを利用することができます。

@Component({ 
    selector: 'olmap', 
    template: '<div id="map" #map class="full-map" data-tap-disabled="true"></div>' 
}) 
export class OLMap { 
    @ViewChild('map') map; 
    constructor(public renderer: Renderer, private cdr: ChangeDetectorRef) { // <----- 
    } 
    ngAfterViewInit() { 
    var layer = new ol.layer.Tile({ 
     source: new ol.source.OSM() 
    }); 
    var london = ol.proj.transform([-0.12755, 51.507222], 'EPSG:4326', 'EPSG:3857'); 
    var view = new ol.View({ 
     center: london, 
     zoom: 6 
    }); 
    var map = new ol.Map({ 
     target: 'map', 
     layers: [layer], 
     view: view 
    }); 
    this.cdr.detectChanges(); // <----- 
    } 
} 
+0

ありがとうございますが、それは動作しません。私はまだ手動でサイズを変更する必要があります。 home.tsで試してみても。 – Xav

+1

実際には、私はsetTimeoutとミックスすると...! setTimeout(function(){ window.dispatchEvent(new Event( "resize")); this.cdr.detectChanges(); }、200);本当の解決策ですか? @ThierryTemplier – Xav

+0

こんにちは@Xav、cdr.detectChanges()であなたの解決策を説明していただけますか? 私はマップの作成後、それを使用していますが、 のsetTimeout( ()=> { window.dispatchEvent(新しいイベント() "サイズを変更")動作するようには思えません。 this.cdr.detectChangesを() ; }、2000、this); – rrabio

0

多分それは追加してみてください、表示されるように、更新が必要なOL3マップです:

map.updateSize(); 

+0

こんにちは@Hicham!いいえ、それは何も変わっていません。ズームイン、ズームアウト、またはノース方向のボタンを押すと、何も変わりません。だから私は地図とのやりとりが何かをしているかどうかはわかりません。 – Xav

関連する問題