2016-02-12 2 views
1

В AngularJS атрибут id из моего шаблона HTML не распознается моим javascript.Атрибут AngularJS id в включенном шаблоне HTML

Например:

index.html файл:

<div ng-controller="SubwayMapController"> 
    <div subway-map></div> 
</div> 

scripts.js файл:

app.directive('subwayMap', function() { 
     return { 
      templateUrl: 'Views/subway-map.html' 
     }; 
    }); 

     map = new OpenLayers.Map("basicMap"); 
     var mapnik   = new OpenLayers.Layer.OSM(); 
     var fromProjection = new OpenLayers.Projection("EPSG:4326"); // Transform from WGS 1984 
     var toProjection = new OpenLayers.Projection("EPSG:900913"); // to Spherical Mercator Projection 
     var position  = new OpenLayers.LonLat(2.35,48.85).transform(fromProjection, toProjection); //Paris 
     var zoom   = 12; 

     map.addLayer(mapnik); 
     map.setCenter(position, zoom); 

метро-map.html файл:

<div id="basicMap"></div> 

Когда Я открываю индексную страницу, я ожидаю, что карта из Openstreetmap для отображения, но ничего не происходит.

+0

Я думаю, вы должны Райту коды карты в функции связи –

ответ

3

Попробуйте настройки карты в link() функции директивы. Кроме того, похоже, что вы можете Map.render() использовать DOMElement вместо необходимости ID.

app.directive('subwayMap', function() { 
     return { 
      templateUrl: 'Views/subway-map.html', 
      link: function(scope, element) { 
       var map   = new OpenLayers.Map(); 
       var mapnik   = new OpenLayers.Layer.OSM(); 
       var fromProjection = new OpenLayers.Projection("EPSG:4326"); 
       var toProjection = new OpenLayers.Projection("EPSG:900913"); 
       var position  = new OpenLayers.LonLat(2.35,48.85) 
             .transform(fromProjection, toProjection); 
       var zoom   = 12; 

       map.addLayer(mapnik); 
       map.setCenter(position, zoom); 
       map.render(element[0]); 
      } 
     }; 
    }); 
+0

Я установил карту в функции 'link()' директивы. Я получаю Угловую ошибку 'this.div.appendChild не является функцией' и ошибка Openstreetmap' this.div.style не определена'. – Johnrednex

+1

Вам придется поиграть с ним немного, без скрипки и всего. Вероятно, вам нужно использовать 'element [0]'. Обновлено. – Malk

+0

Хорошо, я попробовал элемент 'element [0]', и я не получаю больше ошибок. Но карта не показана. Я немного поиграю с ним. – Johnrednex

0

класть карта код доступа в комплектеTimeout. Вы пытаетесь получить доступ к карте сразу. Угловое не выполняется с показом карты, поэтому решение setTimeout.

$timeout(function(){ 
     map = new OpenLayers.Map("basicMap"); 
      var mapnik   = new OpenLayers.Layer.OSM(); 
      var fromProjection = new OpenLayers.Projection("EPSG:4326"); // Transform from WGS 1984 
      var toProjection = new OpenLayers.Projection("EPSG:900913"); // to Spherical Mercator Projection 
      var position  = new OpenLayers.LonLat(2.35,48.85).transform(fromProjection, toProjection); //Paris 
      var zoom   = 12; 

      map.addLayer(mapnik); 
      map.setCenter(position, zoom); 
    },10); 
+0

Лучше использовать '$ timeout' углового, а не' setTimeout'. Нет необходимости ждать полсекунды; нулевой длительности '$ timeout' достаточно, чтобы отложить этот код до следующего цикла дайджеста. –

+0

Я также помещаю этот '$ timeout' в свою функцию закрытия? '(function() {...})();' – Johnrednex

+0

Зачем использовать '$ timeout', когда вы можете просто использовать' ng-onload = "renderMap()" 'Кажется, что произвольный тайм-аут будет хрупким. – taystack

Смежные вопросы