2013-09-25 32 views
0

我已經構建了一個服務來提供向谷歌地圖intance添加標記的可能性,但是這隻發生在使用ngRoute服務的特定控制器中時。問題是,當我第一次加載應用程序時,我的服務無法在注入的控制器之外工作,當我切換到注入控制器並且它可以工作時,但是當我向後轉到控制器時, t注入我的服務作品!問題在哪裏?仍然可以從控制器外部提供服務AngularJs

ngRoute配置

var climbingApp = angular.module('climbingApp', ['ngRoute'], 
function($routeProvider){ 
    $routeProvider.when('/', { 
     controller: 'Main' 
    }); 

    $routeProvider.when ('/newSector', { 
     templateUrl: 'app/templates/newSector.html', 
     controller: 'addSector' 
    }); 
}); 

控制器

function addSector($scope, Markers) { 

     Markers.addListener(function (e){ 
       $scope.lat = e.latLng.lat(); 
      $scope.lng = e.latLng.lng(); 
     }); 

    } 

    function Main ($scope) { 
      $scope.initLocation = { 
        lat: -54.798112, 
        lng: -68.303375 
      }; 

    } 

服務

climbingApp.factory('Markers', function($rootScope){ 
    return { 
     addListener: function(callback) { 
      google.maps.event.addListener(
       map, 
       'click', 
       function(e) { 
        var marker = new google.maps.Marker({ 
         position: e.latLng, 
         map: map 
        }); 

        $rootScope.$apply(function(){ callback(e); }); 
       } 
      ); 
     } 
    } 
}); 

我想這個問題是聽衆仍然依靠地圖實例,但我怎麼能摧毀它呢?

回答

0

你將有更加具體,但要確保你的控制器實際上是被破壞也確保你應該在這裏使用一個工廠......我不爲他們找到許多用途,因爲它們不這意味着你的工廠的一個新實例被注入到每一個控制器中,也就是說,如果你的工廠存儲了數據並且你將它注入了兩個不同的控制器,那麼這兩個數據對於它們都是不同的。另一方面,服務是單身服務,具有相反的效果。這可能就是你所看到的。

+0

難道你不使用.factory方法定義服務嗎?我如何確保控制器正在銷燬? 。 –

+0

裏面你控制器,你可以指定一個對破壞方法,你可以檢查,看看是否被觸發:$ $範圍在(「$滅」,函數(){警報(「控制器毀」)}); – btm1

相關問題