【问题标题】:AngularJS fails to load Bing MapsAngularJS 无法加载 Bing 地图
【发布时间】:2018-08-23 07:22:06
【问题描述】:

我正在使用 AngularJS 显示 Bing 地图,但错误显示“TypeError:无法读取 null 的属性‘原型’”。请看下面。

在我的 Razor 视图文件中有以下内容:

<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"></script>
<script type="text/javascript" src="~/lib/angular/angular.min.js"></script>
<script src="~/js/Site.js"></script>
----
----
--
<div ng-app="myDisplayItems">
    <div ng-controller="myDisplayItemsController">
        <div id="myMap"></div>
    </div>
</div>

在我的 JavaScript 文件中有:

var displayItems = angular.module("myDisplayItems", []);
displayItems.controller("myDisplayItemsController", function myDisplayItemsController($scope) {
    showMap();
});

function showMap() {         
    var key = "######";

    var map = new Microsoft.Maps.Map('#myMap', {
        credentials: key,
        zoom: 3
    });
}

更新:

var displayItems = angular.module("myDisplayItems", []);
displayItems.controller("myDisplayItemsController", function myDisplayItemsController($scope) {
   $scope.map = null;
   $scope.init = function () {
         $scope.map = showMap();
   };

   angular.element(document).ready(function () {
         $scope.init();
   });
});

【问题讨论】:

    标签: javascript bing-maps


    【解决方案1】:

    显然,由于 Bing 地图库在地图初始化后尚未准备就绪,因此会发生此错误。

    没有发生错误,是不是showMap函数在延迟后被调用(假设此时Bing地图库已经加载),例如:

    $timeout(function() { $scope.initMap()}, 2000); 
    

    但我会提出以下解决方案:

    注册必应地图库准备好后需要触发的函数,如下所示:

    Microsoft.Maps.CallbackOnLoad = "initMap";
    

    并声明initMap一个全局函数:

    $window.showMap = function () {
       //...
    }
    

    演示

    angular.module('mapApp', []);
        angular
            .module('mapApp')
            .controller('MapController', MapController);
    
        function MapController($scope, $window) {
    
            $window.initMap = function () {
                let map = new window.Microsoft.Maps.Map(
                    document.getElementById('myMap'), {
                        credentials: 'AjwUEXFZA8SMyy8CaJj59vJKVDoWohNXVFz_uGyHlT8N40Jgr-zrhvcxbTNRyDqn'
                    });
                map.setView({
                    zoom: 6,
                    center: new Microsoft.Maps.Location(52.406978607177734, -1.5077600479125977)
                });
            }
    
            Microsoft.Maps.CallbackOnLoad = "initMap";
        }
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
    <script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"></script>
    
    <div ng-app="mapApp" ng-controller="MapController">
        <div id="myMap" style="width:600px;height:400px;"></div>
    </div>

    【讨论】:

    • 感谢您的回复。我需要一段时间才能弄清楚你的意思,因为我还在学习 JavaScript、Angular、Bing 地图和 MVC 概念。
    • 按照您的建议,我可以显示地图。下一阶段将使用 $http 调用从 MS SQL Server 数据库中获取经度和纬度。
    猜你喜欢
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多