RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 880850
Accepted
Masquitos
Masquitos
Asked:2020-09-13 17:44:06 +0000 UTC2020-09-13 17:44:06 +0000 UTC 2020-09-13 17:44:06 +0000 UTC

如何在 Angular 5 中连接 yandex 地图?

  • 772

如何在 Angular 5 中连接 yandex 地图?我试图制作一个组件。但是在浏览器中使用会报错ng --open:ERROR TypeError: Cannot read property 'ready' of undefined 显然没有初始化ymaps如何加载呢?

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-yamaps',
  templateUrl: './yamaps.component.html',
  styleUrls: ['./yamaps.component.css']
})
export class YamapsComponent implements OnInit {
  ymaps: any;
  myCoordinates: any;
  myMap: any;
  myPlacemark: any;
  closeMapButton: any;

  constructor() { }

  ngOnInit() {
    this.ymaps.ready().then(
      () => {
        this.myMap = new this.ymaps.Map("map", {
          center: [37.5468326405449, 55.6623162095321],
          zoom: 15,
          controls: ['fullscreenControl', 'geolocationControl']
        }, {
            yandexMapDisablePoiInteractivity: true,
            suppressMapOpenBlock: true
          });

        //Создаем кнопку на карте
        this.closeMapButton = new this.ymaps.control.Button({
          data: {
            content: "Закрыть карту"
          },
          options: {
            maxWidth: [170, 400, 600]
          }
        });

        // Задает кнопку кликом
        this.myMap.events.add('click', function (e) {
          if (this.myPlacemark == null)
            this.myPlacemark = new this.ymaps.Placemark([], {});
          this.myMap.geoObjects.add(this.myPlacemark);
          var position = e.get('coords');
          this.myPlacemark.geometry.setCoordinates(position);
          this.myCoordinates = this.myPlacemark.geometry.getCoordinates();
          document.getElementById('sendDataToServer').removeAttribute("disabled");
        });

        this.ymaps.geolocation.get({
          // Выставляем опцию для определения положения по ip
          //provider: 'yandex',
          // Карта автоматически отцентрируется по положению пользователя.
          mapStateAutoApply: true
        }).then(function (result) {
          this.myMap.geoObjects.add(result.geoObjects);
          this.myPostition = result.geoObjects.position;
        });
      });
  }
}
yandex-maps-jsapi
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. eustatos
    2020-02-11T03:51:46Z2020-02-11T03:51:46Z

    Stackblitz示例

    这里有几个主要文件。在下载地图的服务中,您可以而且应该添加对地图是否存在的检查,以便返回已经完成的地图(如果有)。

    // map-loader.service.ts
    import { Injectable } from '@angular/core';
    import { Subject, Observable } from 'rxjs';
    
    @Injectable({
      providedIn: 'root'
    })
    export class MapLoaderService {
      map$: Subject<any>;
    
      constructor() {
        this.map$ = new Subject<any>();
      }
    
      getMap(element: string, coords: number[]): Observable<any> {
        const scriptYmaps = document.createElement('script');
        scriptYmaps.src = 'https://api-maps.yandex.ru/2.1/?lang=ru_RU';
        document.body.appendChild(scriptYmaps);
        const createMap = () => {
          const map = new ymaps.Map(
            element,
            {
              center: coords,
              zoom: 9
            }
          )
        }
        scriptYmaps.onload = function () {
          ymaps.ready(createMap);
        }
    
        return this.map$;
      }
    }
    
    // app.component.ts
    import { Component, OnInit, OnDestroy } from '@angular/core';
    import { MapLoaderService } from './map-loader.service';
    import { Subject } from 'rxjs';
    import { takeUntil } from 'rxjs/operators';
    
    @Component({
      selector: 'my-app',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css']
    })
    export class AppComponent implements OnInit, OnDestroy {
      map: any;
      loading$: Subject<boolean>;
      ngUnsubscribe$: Subject<void>;
    
      constructor(
        private _mapLoaderService: MapLoaderService
      ) {
        this.loading$ = new Subject<boolean>();
        this.ngUnsubscribe$ = new Subject<void>();
       }
    
      ngOnInit() {
        this.loading$.next(true);
        this._mapLoaderService.getMap(
          'map',
          [55.751574, 37.573856]
        )
        .pipe(
          takeUntil(this.ngUnsubscribe$)
        )
        .subscribe(map => {
          this.map = map;
          this.loading$.next(false);
        });
      }
    
      ngOnDestroy() {
        this.ngUnsubscribe$.next();
        this.ngUnsubscribe$.complete();
      }
    }
    
    • 1
  2. Best Answer
    Masquitos
    2020-09-13T19:54:55Z2020-09-13T19:54:55Z

    安装了这个东西https://www.npmjs.com/package/ymaps并注册它(window as any).global = window;似乎工作。

    import { Component, OnInit } from '@angular/core';
    import ymaps from 'ymaps';
    (window as any).global = window;
    
    • 0

相关问题

  • 开放集群气球

  • 处理搜索结果

  • StretchyIcon 的可点击区域

  • 我无法将 html 标记添加到 Yandex 地图上的气球

  • 折线顶点颜色

  • DblClickZoom 禁用

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5