我在一個角度指令中包裝D3 svg圖像。當用戶點擊D3圖像時,我想在控制器中設置一個變量爲true,這樣ng-show會顯示另一個D3圖像。
我所做的是在D3圖像中添加.on("click")
函數,並在該函數中使用$rootScope.$emit()
發送事件。在第二個圖像的控制器中,我有一個$rootScope.$on()
來附加事件,並將ng-show的變量設置爲true。
此方法不起作用。我已經測試了代碼以確保事件被排除並被正確捕獲,但是它是,但是ng-show不顯示第二個D3圖像。
這是爲什麼?
我已經創建了一個小plunkr來說明我正在嘗試做什麼。 http://plnkr.co/edit/FnqeAF9kVXxdUdOzT5to。
控制器代碼如下:
function CircleCtrl($rootScope) {
this.render = function(element, attrs) {
var svg = d3.select(element[0]).append("svg")
.attr("width", 200)
.attr("height", 200);
var circle = svg.append("circle")
.attr("cx", 30)
.attr("cy", 30)
.attr("r", 20);
circle.on("click", function(d,i) {
var data = {val0: "zero", val1: "one"};
$rootScope.$emit("Circle Clicked", data);
});
};
}
function SquareCtrl($rootScope) {
this.showSquare = false;
$rootScope.$on("Circle Clicked", function(event, data) {
this.showSquare = true;
})
this.render = function(element, attrs) {
var svg = d3.select(element[0]).append("svg")
.attr("width", 200)
.attr("height", 200);
var rectangle = svg.append("rect")
.attr("x", 10)
.attr("y", 10)
.attr("width", 50)
.attr("height", 100);
};
}
angular.module("AngularD3Example")
.controller("CircleCtrl", ["$rootScope", CircleCtrl])
.controller("SquareCtrl", ["$rootScope", SquareCtrl]);
您還需要取消註冊$ rootScope偵聽器,否則會導致應用程序內存泄漏。 – Yeysides
@Yeysides感謝您的編輯..讚賞它。我以某種方式對其進行了改進。 –
感謝您接受...我犯了一些語法錯誤,但是由您來改變它們! – Yeysides