(更新:仍未解决此问题。)
(进一步更新:我没有得到任何人的进一步回复。当然这必须是可以解决的吗?)
我正在组合Angular和D3,我认为这会导致一些问题。我的模型正在更新(console.log告诉我)。并且视图可以看到vm.blueEV在开头应该为0。但观点永远不会更新。
我认为我需要添加$scope.$apply()
,所以我做了,但它没有帮助。这是我的相关代码。我错过了什么?
// controller.js
myApp.controller('myController', ['$scope', function($scope) {
var vm = this;
vm.blueEV = 0;
vm.clickState = function(d, i, state) {
$scope.$apply(function() {
if (state.classList == "neutral") {
d3.select(state)
.classed({"neutral": false, "blue": true});
vm.blueEV += d.ev;
vm.unassignedEV -= d.ev;
};
});
};
}]);
// directive.js
return {
restrict: 'E',
scope: {
// val: '=',
clickState: '&',
},
controller: 'myController',
controllerAs: 'vm',
bindToController: true,
link: function(scope, element, attrs) {
var vm = scope.vm;
d3.json("public/us-states.json", function(json) {
svg.selectAll("path")
.data(json.features)
.enter()
.append("path")
.attr("d", path)
.attr("class", "neutral")
.attr("id", "states")
.on('click', function(d, i) {
return vm.clickState(d, i, this);
})
[etc.]