LeafletJs-无法设置未定义的属性“ L”

时间:2019-01-03 13:08:57

标签: javascript angularjs leaflet

我在AngularJS(版本1.5.8)项目中使用LeafletJs作为地图,最近我一直在使用unpkg.com URL-直到最近我还是决定使用本地下载的代码(有几个原因-其中之一是离线运行的应用程序。

我现在遇到的问题是,只要将脚本加载到index.html文件中,我都会收到此错误:

  

未捕获的TypeError:无法设置未定义的属性'L'

查看源代码,引发错误的代码部分是Javascript的最开始:

(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
    typeof define === 'function' && define.amd ? define(['exports'], factory) :
    (factory((global.L = {}))); // This line is where the error is thrown.
}(this, (function (exports) { 'use strict';
// Here would now be the entire code of Leaflet.

在进行更多测试时,global的名称为undefined

我还没有打电话给Leaflet。即使注释掉所有内容,但此脚本也会导致我仍然收到此错误。我认为与Agular的关系比什么都重要,但是我想知道我做错了什么。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为我已经设法解决了。正如我之前说的,globalundefined,因此将其设置为应该是的默认值(在这种情况下为Window)似乎可以解决问题。 / p>

(function (global = Window, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
    typeof define === 'function' && define.amd ? define(['exports'], factory) :
    (factory((global.L = {}))); // This line is where the error is thrown.
}(this, (function (exports) { 'use strict';
// Here would now be the entire code of Leaflet.

设置global = Window而不是设置(factory((Window.L = {})));的目的是,以便在未定义的情况下仍将使用用户的窗口信息。从我的角度来看,我需要做的事情似乎还可以。