当您到达滚动间谍中的另一张幻灯片时,我正在尝试更改地图。我无法从服务中获取一个数字以用作数组的索引。我把这个项目放在了stackblitz上。这是 app.component.ts
export class AppComponent {
slides=slides
mapCenter = [-121.448637, 37.724050];
basemapType = 'satellite';
mapZoomLevel = 13;
currentSection:any = 1;
toggleSidebar() {
if (document.getElementById("mySidebar").style.display === "none") {
document.getElementById("mySidebar").style.display = "block";
} else {
document.getElementById("mySidebar").style.display = "none";
}
}
constructor(private data: SlideService) { }
ngOnInit() {
this.currentSection = this.data.currentMessage.subscribe(msg => this.currentSection = msg.slice(-1));
let zoomlist:any[]=[];
for (let slide of slides){
if(slide.MapAttributes.viewType==="detailed"){
continue;
}
let zoom = slide.MapAttributes.Zoom
zoomlist.push(zoom)
}
this.mapZoomLevel = zoomlist[(+(this.currentSection)-1)]
let centerlist:any[]=[];
for (let slide of slides){
if(slide.MapAttributes.viewType==="detailed"){
continue;
}
let center = slide.MapAttributes.MapCenter
centerlist.push(center)
}
this.mapCenter = centerlist[(+(this.currentSection)-1)]
}
这是html
<div class="row" style="height:100%;overflow-x:hidden">
<app-sidebar id="mySidebar"class="col-sm-4"></app-sidebar>
<div id='map-container'>
<app-esri-map [center]="mapCenter" [basemap]="basemapType" [zoom]="mapZoomLevel" (mapLoaded)="mapLoadedEvent($event)"></app-esri-map>
</div>
<button (click)="toggleSidebar()" id= "infoToggle">current:{{currentSection}}</button>
</div>
这就是服务
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class SlideService {
private messageSource = new BehaviorSubject<string>("slide1");
currentMessage = this.messageSource.asObservable();
constructor() { }
changeMessage(msg: string) {
this.messageSource.next(msg);
}
}