我正在做一个应用程序,当我点击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正在发生。我迷路了
感谢 彼得
答案 0 :(得分:1)
addListener
不是Angular函数,不会触发摘要循环。你需要手动完成。
例如:
allMarkers.addListener('click', function() {
$scope.$apply(function () {
vm.house = vm.houses[0]
});
});
请注意,您需要为此注入$scope
。
ng-click
触发摘要循环,这就是为什么使用它会更新HTML。