我正在使用 D3 和 Angular 开发地图应用程序,但在单击事件的模板中显示范围值时遇到问题。
我的指令:
angular.module("maineMap")
.directive("ngMap", ["appConfig", function(config){
function countyClickHandler(d, i, scope){
scope.currentCounty(d.properties.fips);
console.log(scope.countySelection);
}
function initMap() {
//.... other code
g.append("g")
.attr("class", "counties")
.selectAll("path")
.data(scope.mapData.features)
.enter()
.append("path")
.attr("d", path)
.attr("class", function(d){
return d.properties.name;
})
.on("click", function(d, i){
countyClickHandler(d, i, scope);
});
}
return {
restrict : "E",
link : function(scope, el, attrs){
initMap(scope, el);
}
};
}]);
我的控制器:
angular.module("maineMap")
.controller('MapCtrl', ['$scope','MapService', function($scope, MapService){
//execute data fetches via promises on template load
$scope.mapData = MapService.getMapPaths().getData();
$scope.cityData = MapService.getCityPositions().getData();
$scope.countyData = MapService.getMapData().getData();
$scope.countySelection = {};
$scope.currentCounty = function(fips){
$scope.countySelection = getCountyData($scope, fips);
console.log($scope.countySelection);
};
}]);
//helper function to extract data from external JSON file
function getCountyData($scope, fips){
for(var i = 0; i < $scope.countyData.properties.length; i++) {
if ($scope.countyData.properties[i].FIPS === fips){
return $scope.countyData.properties[i];
}
}
}
因此,当前行为有一个click
事件绑定到指令中绘制的路径。控制器有一个绑定到作用域的函数,该作用域执行辅助函数以获取相关数据。
console.log()
语句按预期打印出来,首先显示控制器方法,然后是指令调用。所以我知道这些值在示波器上是可见的。但是,使用此模板,它们根本没有显示:
<ng-map>
<div id = "countyData">
County: <span class = "countyDataPoint"> {{countySelection}}</span>
2000 Population: <span class = "countyDataPoint"> {{countySelection.POP2000}}</span>
</div>
</ng-map>
div的唯一输出是County 元素 countyData
的一对空值。是空的。{}
countySelection.POP2000
鉴于此布局,如何通过click
事件更新模板与范围值?