在AngularJS指令中使用Skobbler:' Map容器​​已经初始化。'

时间:2014-07-11 11:57:13

标签: angularjs angularjs-directive skmaps

使用指令渲染Skobbler传单:

angular.module('app.directives').directive('skm', function()
{
    return {
        restrict: 'E',
        replace: true,
        scope: false,
        template: '<div></div>',
        link: function(scope, element, attrs) {

            var map = L.skobbler.map('skm', scope.skm);

            // ....
        }
    }
});

该指令以类似的方式用于不同的路径/部分:

<skm id="skm"></skm>

版本信息:

  • Skobbler 2.0
  • AngularJS 1.2.16

从第1页移到第2页时,没问题。但是,回到第1页:

    Error: Map container is already initialized.

我已尝试存储地图对象并使用 map.remove(),这会删除错误但会停止渲染地图。

已修复:请参阅下面的答案。 (在每个部分中使用唯一的ID并抓住它们)

2 个答案:

答案 0 :(得分:3)

修正:只需在每个部分中添加一个唯一ID,然后获取指令中的ID,然后使用此ID创建传单。

第1部分:

<skm id="skm1"></skm>

第2部分:

<skm id="skm2"></skm>

指令:

angular.module('app.directives').directive('skm', function()
{
    return {
        restrict: 'E',
        replace: true,
        scope: false,
        template: '<div></div>',
        link: function(scope, element, attrs) {

            var map = L.skobbler.map(attrs.id, scope.skm);

            // ....
        }
    }
});

什么没有用?

  • 在指令$ destroy上取代了原始HTML的outerHTML(指令并没有很好地发挥作用)
  • map.remove()(Skobbler并不关心)
  • 在Skobbler图书馆大喊亵渎(Skobbler并不在意)

答案 1 :(得分:0)

Skobblerjs是一个&#34;瘦&#34; leafletjs的分叉所以(很可能)错误来自传单逻辑,而不是skobbler逻辑。

还有其他一些提及此错误的内容,请参阅以下任何内容对您有所帮助: https://groups.google.com/forum/#!topic/leaflet-js/xDNcNBAZq8o http://forums.enyojs.com/discussion/540/leaflet-maps

如果没有 - 那么请包含一个jsfiddle或plunker示例,以便我们能够调试