2

使用指令呈现 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>

版本信息:

  • 斯柯布勒 2.0
  • AngularJS 1.2.16

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

    Error: Map container is already initialized.

我尝试存储地图对象并使用map.remove(),它消除了错误但停止了地图的渲染。

固定:请参阅下面的答案。(在每个部分中使用唯一 ID 并获取它们)

4

2 回答 2

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 不在乎)
于 2014-07-14T08:11:40.077 回答
0

Skobblerjs 是 Leafletjs 的“瘦”分支,因此(很可能)错误来自传单逻辑,而不是 skobbler 逻辑。

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

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

于 2014-07-14T07:11:41.860 回答