使用Angular从事件处理程序更新范围

时间:2014-09-11 20:29:55

标签: angularjs google-maps

我有一个问题,我希望有人会帮助我。我正在使用Angular和有角度的谷歌地图指令。我有一个在空闲时注册的事件处理程序,所以我想更新显示的标记但是当处理事件时它会返回地图并且我已经丢失了范围所以我不确定如何在地图上添加新标记?

我设置了这样的地图:

<google-map center="map.center" zoom="map.zoom" events="map.events"> <markers> <marker ng-repeat="marker in map.markers" coords="marker"> </marker> </markers> </google-map> 

然后使用以下内容在事件上设置其初始值:

 $scope.map = {
    center: {
        latitude: 45,
        longitude: -73
    },
    zoom: 8,
    events:{
       idle:getJobs
    },
    markers:[]
};

当事件触发getJobs函数时,我已经丢失了范围,所以无法将新标记推到地图上,有角度,任何想法?

function getJobs($scope) {
    self = this;
    JobService.getJobs(self.map).then(function(jobData){
        for (var i = 0; i < jobData.length; i++) {
            var job = jobData[i];
            if (job.get('location') != null && job.get('location').longitude != null) {
                $scope.map.markers.push(createJobMarker(job.get('role'),job.get('location').longitude,job.get('location').latitude),i);              
            }
        }
    });
}

1 个答案:

答案 0 :(得分:1)

尝试

function getJobs($scope) {
    self = this;
    JobService.getJobs(self.map).then(function(jobData){
        $scope.apply(function () {
            for (var i = 0; i < jobData.length; i++) {
                var job = jobData[i];
                if (job.get('location') != null && job.get('location').longitude != null) {
                    $scope.map.markers.push(createJobMarker(job.get('role'),job.get('location').longitude,job.get('location').latitude),i);              
                }
            }
        });
    });
}

更新

我明白了,你只是失去对范围变量的引用。尝试设置您的活动:

$scope.map = {
    center: {
        latitude: 45,
        longitude: -73
    },
    zoom: 8,
    events:{
       idle: function () {
           getJobs($scope);
       }
    },
    markers:[]
};