2014-04-07 93 views
0

我有產生谷歌地圖一個指令:

directive('gMap', function(googleMaps){ 
return{ 
     restrict: 'E', 
     replace: true, 
     transclude: true, 
     template: "<div ng-transclude></div>", 
     scope: true, 
     link: function(scope, element, attrs){ 
      scope.$on('location', function(){ 
       //här ska den recentreras 
      }) 

      //create the map 
      var center = googleMaps.makePosition(attrs.centerlat, attrs.centerlong) 
      //update map on load 
      var options = googleMaps.setMapOptions(center, attrs.zoom); 
      scope.map = googleMaps.createMap(options, attrs.id) 
      //googleMaps.addMarker(map, center,'Hello') 

     }, 
     controller: ['$scope', function($scope) { 
      console.log($scope); 
     }] 
    }; 
}). 

當我console.log($scope),它輸出包含節點地圖的對象。 當我嘗試console.log($scope.map)它輸出undefinded,爲什麼呢?

+0

奇怪的是,如果我在$超時包裝它這個工程:0 – Himmators

回答

0

這是因爲你有一個範圍,當你調用console.log(),但是map還沒有被創建,因爲控制器在預鏈接階段之前被實例化。

假設你使用Chrome,console.log()可以產生一個「更新」的觀點,但這在當時console.log()被稱爲反映對象的狀態。但undefined當然不能更新。

+0

我看到的,是有處理這個最佳practie?我需要在創建地圖對象後執行它,因爲我在一個子節點中使用它。 – Himmators

+1

@KristofferNolgren如果您需要在控制器構造'map'的'$ timeout'是一個完美的解決方案。 – zeroflagL

+0

感覺有點像一個黑客,但... – Himmators

相關問題