我在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的关系比什么都重要,但是我想知道我做错了什么。
任何帮助都将不胜感激。
答案 0 :(得分:0)
我认为我已经设法解决了。正如我之前说的,global
是undefined
,因此将其设置为应该是的默认值(在这种情况下为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 = {})));
的目的是,以便在未定义的情况下仍将使用用户的窗口信息。从我的角度来看,我需要做的事情似乎还可以。