1

我有一个指令来显示谷歌地图。我从rootcope传递晶格和经度值。第一次正确加载地图,但如果我通过rootcope改变晶格和经度值,它不会加载并显示空白地图。它也不会引发任何错误。在指令中使用rootscope变量

我的地图指示

<map class="card map" ng-hide="{{$scope.hideMap=false;}}" on-create="mapCreated(map)"></map> 

我的指令代码:

angular.module( 'starter.directives',[])

.directive('map', function($rootScope) { 
    return { 
    restrict: 'E', 
    scope: { 
     onCreate: '&', 

    }, 
    link: function ($scope, $element, $attr) { 
     function initialize() { 

      //Need to pass value from rootscope 

     myLatlng = new google.maps.LatLng($rootScope.prodPositions.latitude, $rootScope.prodPositions.longitude); 



     var mapOptions = { 
      center: myLatlng, 
      zoom: 16, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 
     var map = new google.maps.Map($element[0], mapOptions); 

    var marker = new google.maps.Marker({ 
      position: myLatlng, 
      map: map, 
      title: 'Pizz Hut' 
     }); 
     $scope.onCreate({map: map}); 

     // Stop the side bar from dragging when mousedown/tapdown on the map 
     google.maps.event.addDomListener($element[0], 'mousedown', function (e) { 
      e.preventDefault(); 
      return false; 
     }); 
     } 

     if (document.readyState === "complete") { 
     initialize(); 
      console.log("test lat2"+$rootScope.prodPositions.latitude, $rootScope.prodPositions.longitude); 
     } else { 
     google.maps.event.addDomListener(window, 'load', initialize); 
      console.log("test lat3"+$rootScope.prodPositions.latitude, $rootScope.prodPositions.longitude); 
     } 
    } 
    } 
}); 
+0

你需要重新渲染指令,或负责绘制地图,每一次你rootScope变量的值变化的功能。 – Shivi

+0

**注意:**'ng-hide'不应该有插值,它应该是'ng-hide =“hideMap”' –

+0

@PankajParkar如何重新渲染指令? – Naju

回答

0

我认为你需要注意变量$rootScope.prodPositions变化,然后你需要重新编译你的指令。

重新编译指令,你NEDD添加这个您的链接函数中:

$compile($element.contents())($scope);

,并添加$compile服务作为DI。

Angular $compile

+0

如何重新编译指令?你能给我一些参考吗? – Naju

+0

您需要在检测到更改后在链接函数中添加'$ compile($ element.contents())($ scope);'。 – Niezborala