2014-07-11 27 views
2

使用指令來呈現Skobbler傳單:在AngularJS指令中使用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(),這消除了錯誤,但是從渲染停止地圖。

FIXED:請參閱下面的答案。 (在每個部分使用唯一的ID,並抓住這些)

+0

建議:如果您創建JSFiddle或Plunker來演示該問題,可能會使其更容易幫助。 –

回答

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); 

      // .... 
     } 
    } 
}); 

什麼不工作:

  • 在指令$破壞與原始的HTML代替outerHTML(指令沒有發揮好)
  • map.remove()(Skobbler沒在意)
  • 在Skobbler庫呼喊褻瀆(Skobbler沒護理)