标记eventListener无法向我提供我请求的对象

时间:2015-12-14 20:32:22

标签: angularjs google-maps google-maps-api-3

我正在做一个应用程序,当我点击google.map上的标记触发某些操作时,特别是我想从对象数组中获取一个对象以显示此类对象的详细信息。

我使用控制器defs像这样

(function() {
 'use strict';

angular
   .module('gulpAngular')
   .controller('GeolocationController', GeolocationController);

/** @ngInject */
function GeolocationController(HouseList) {
....
}
})();

HouseList是在其他地方定义的服务,它有一个名为getHouses()的方法

在我的控制器内部,除了其他事情之外我还做了:

var vm = this;
vm.houses = HouseList.getHouses();

然后我在地图上定义我的标记,如

allMarkers = new google.maps.Marker({....});

并添加一个Listener,如下所示。为简单起见,我指定了vm.house = vm.houses [0]

allMarkers.addListener('click', function() {
    vm.house = vm.houses[0]
}

现在我想我应该能够使用vm.house对象在我的html块中以

的方式显示这个house对象的属性
<h4>{{vm.house.bedrooms}}</h4>

然而,没有显示出来。我应该看到我的vm.house对象被更新,这反映在DOM上,对吗?我错过了什么?

搞笑:当我在html上添加一个简单的按钮并在其上使用ng-click功能时,除了说console.log(vm.house)之外,不仅它显示正确的对象,而且还刷新的HTML正在发生。我迷路了

感谢 彼得

1 个答案:

答案 0 :(得分:1)

addListener不是Angular函数,不会触发摘要循环。你需要手动完成。

例如:

allMarkers.addListener('click', function() {
    $scope.$apply(function () {
        vm.house = vm.houses[0]
    });
});

请注意,您需要为此注入$scope

ng-click触发摘要循环,这就是为什么使用它会更新HTML。