【发布时间】:2012-06-26 04:50:33
【问题描述】:
我正在考虑从backbonejs 迁移到angularjs。
在主干中,我可以初始化一个视图,然后创建一个谷歌地图实例。然后我可以平移/缩放/等并在视图之间切换,而不会丢失地图的当前状态。
使用 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 并在那里初始化地图。没有成功。
底线是我需要异步初始化一个谷歌地图并将数据推送到本地或远程,并且能够导航应用程序而无需每次都从头开始重新加载地图。
有人可以建议正确的方法吗?
谢谢你:)
根据 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
【问题讨论】:
-
+1。也想知道答案。
-
我创建了一个项目angular-google-maps,并不断改进。见live version
-
太好了,已经在我的观察名单上。 :)
-
@LarryEitel 你应该接受安迪的回答
-
我无法让它在 AngularJS 1.0.8 和 Google Maps API v3 中以最轻微的方式工作。
标签: google-maps angularjs