当前位置: 首页 > 面试题库 >

在AngularJS中初始化Google Map

周育
2023-03-14
问题内容

我正在考虑从lobbjs迁移到angularjs。

在骨干网中,我能够初始化一个视图,此时我将创建一个google map实例。然后,我可以平移/缩放/等并在视图之间切换,而不会丢失地图的当前状态。

鉴于以下使用angularjs:

layout.html

<body>
  <div class="container-fluid" ng-view></div>

map.html

<div id="map_canvas" ng-controller="MapCtrl"></div>

我能够创建一个指令来渲染地图。问题在于,每次我切换回地图视图时,都会重新加载地图。

<map></map>

因此,根据我对Angular的了解,我认为我将创建一个MapController并在那里初始化地图。没有成功

最重要的是,我需要异步初始化Google地图并将数据本地或远程推送到它,并且能够导航应用程序而无需每次从头开始重新加载地图。

有人可以建议正确的方法吗?

谢谢 :)

尝试每位Andy Joslin建议:

在app.js中:

// Generated by CoffeeScript 1.3.3
(function() {
  "use strict";

  angular.module("ofm", ["ofm.filters", "GoogleMaps", "ofm.directives"]).config([
    "$routeProvider", "$locationProvider", function($routeProvider, $locationProvider) {
      $routeProvider.when("/", {
        templateUrl: "partials/home"
      }).when("/map", {
        templateUrl: "partials/map",
        controller: MapCtrl
      }).otherwise({
        redirectTo: "/"
      });
      return $locationProvider.html5Mode(true);
    }
  ]);

}).call(this);

在services.js中:

angular.module('GoogleMaps', []).
  factory('wasMapInitialized', function() {
    console.log("inside service");
    var maps = 0;

    if (!maps) {
      maps += 1;
      return 0;
    } else {
      return 1;
    }
  });

在controllers.js中:

function MapCtrl($scope) {
  if (!GoogleMaps.wasMapInitialized()) {
    var lat = 46.87916;
    var lng = -3.32910;
    var map_id = '#map';
    initialize(map_id, lat, lng);
  }
  function initialize(map_id, lat, lng) {
    var myOptions = {
      zoom : 8,
      center : new google.maps.LatLng(lat, lng),
      mapTypeId : google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map($(map_id)[0], myOptions);
  }
}

在map.html中

#map
<div ng-controller="MapCtrl"></div>

我收到错误消息:未知提供者:GoogleMapsProvider <-GoogleMaps


问题答案:

由于视图更改时视图会创建和销毁控制器,因此您希望地图数据保留在其他位置。尝试创建将存​​储数据的GoogleMap服务。

myApp.factory('GoogleMaps', function() {
  var maps = {};

  function addMap(mapId) {
    maps[mapId] = {};
  }
  function getMap(mapId) {
    if (!maps[mapId]) addMap(mapId);
    return maps[mapId];
  }

  return {
    addMap: addMap,
    getMap: getMap
  }
});

function MyController($scope, GoogleMaps) {
  //Each time the view is switched to this, retrieve supermanMap
  $scope.map = GoogleMaps.getMap('supermanMap');

  $scope.editMap = function() {
    $scope.map.kryptonite = true;
  };
}

如果您不喜欢这种解决方案,那么还有其他方法可以实现。



 类似资料:
  • 问题内容: 我同时使用AngularJS和Foundation。 要初始化Foundation JS,您必须进行以下调用: 在AngularJS应用程序中进行此调用的最佳方法是什么?代码示例将不胜感激。 另外,如果我要围绕Foundation JS组件编写指令,那么如何确保Foundation已初始化? 问题答案: 您可以编写代码以将其引入Angular框架。这是一个使用with 的示例,也可以使

  • 问题内容: 我在尝试使用异步数据初始化过滤器时遇到麻烦。 过滤器非常简单,它需要将路径转换为名称,但是这样做需要一个对应数组,我需要从服务器中获取该数组。 在返回函数之前,我可以在过滤器定义中执行操作,但是异步方面阻止了该操作 使用诺言可能是可行的,但我对角负载如何过滤没有明确的了解。这篇文章解释了如何通过服务实现这种魔力,但是是否有可能对过滤器做同样的事情? 而且,如果有人对如何翻译这些路径有更

  • 据我所知,在Java11中,这两个操作可以在一行中完成,不是吗?

  • 问题内容: 我正在尝试使用AngularJS 1.1.5的ng- repeat从选择框开始使用预填充选项。相反,选择始终始于未选择任何内容。它还有一个空选项,我不想要。我认为没有选择任何东西都会带来副作用。 我可以使用ng-options代替ng-repeat来工作,但在这种情况下我想使用ng- repeat。尽管我缩小的示例没有显示出来,但我也想设置每个选项的title属性,据我所知,没有办法使

  • 在我的AngularJS应用程序中执行任何控制器之前,我有一些全局数据需要加载(即在AngularJS中全局解析依赖项)。 例如,我有一个,它带有方法,它向后端服务器发出请求,以获取关于当前通过身份验证的用户的数据。我有一个控制器需要这些数据来启动另一个请求(例如加载用户的余额)。 我怎样才能做到呢?

  • Initialization 初始化 Although it doesn’t look superficially very different from initialization in C or C++, initialization in Go is more powerful. Complex structures can be built during initialization a