我如何在我的 AngularJS 中获取这个 D3.js HTML 元素,以便我可以操作它
How can I get this D3.js HTML element in my AngularJS so that I can manipulate it?
我正在尝试在我的网页上使用 D3.js 的 Javascript 图形库绘制图形。我可以使用 HTML 在 SVG 上画一条灰线。我可以在我也在Javascript中创建的新SVG容器上使用Javascript绘制一条红线。但是我不知道如何在HTML中创建的SVG元素上绘制阅读线。
我试过var svgContainer = document.getElementById("my_svg_widget")
但没有用。
如何在已经在 HTML 文件中声明的 SVG 元素上绘制红线(与灰线具有相同的端点)
这是Plunker:https://plnkr.co/edit/F6deVZU3NNADOeIdC5Iy?p=preview
以下是我的文件供您参考。
Javascript:
myApp = angular.module('myApp', ['ui.router'] );
myApp.config(function($stateProvider, $urlRouterProvider, $locationProvider) {
$stateProvider.state('myState', {url: '/myState', params: {slug: {value: null, squash: true} }, templateUrl: 'my-state-page1.html', controller: 'MyStateCtrl'} );
}
);
myApp.controller('MyStateCtrl', function($scope, $http) {
var self = this;
$scope.$watch(function() {return self.myDataFromAPI}, function (objVal) {
console.log('objVal = ', objVal);
x = objVal.origin.split('.');
console.log("X = ", x)
var svgContainer = d3.select("body")
.append("svg")
.attr("width", 1000)
.attr("height", 1000);
var line = svgContainer.append("line")
.attr("x1", 0)
.attr("y1", 0)
.attr("x2", Number(x[2]))
.attr("y2", Number(x[3]))
.attr("stroke-width", 2)
.attr("stroke", "red");
},
true
);
self.httpFailure = function(response) {
console.log('Failure');
self.myDataFromAPI = null;
}
self.httpSuccess = function(response) {
console.log(''n'n'nGot the data from the API!');
self.myDataFromAPI = response.data;
console.log(''n'n'self.myDataFromAPI =', self.myDataFromAPI);
}
$http.get(
'https://httpbin.org/get'
).then(self.httpSuccess, self.httpFailure);
}
);
myApp.directive('mypMyDirective',function(){
return {
restrict:'E',
scope: {
myDataFromAPI: '='
},
controller: 'MyStateCtrl',
controllerAs: 'myStateCtrl',
bindToController: true,
templateUrl: 'myD3Diagram.html'
};
}
);
索引.html:
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.18/angular-ui-router.js"></script>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body>
HELLO!
<div ng-controller="MyStateCtrl as myStateCtrl">
<myp-my-directive mydatafromapi="myStateCtrl.myDataFromAPI"></myp-my-directive>
</div>
</body>
</html>
myD3图.html:
<svg id="my_svg_widget" width="500" height="500">
<line x1="5" y1="5" x2="40" y2="40" stroke="gray" stroke-width="5" />
</svg>
在这种情况下,每次调用监视函数时都会附加一个新的 svg。
var svgContainer = d3.select("body")
.append("svg")
.attr("width", 1000)
.attr("height", 1000);
在监视函数中正确执行操作,而不是创建新的 svg,只需执行选择d3.select("svg")
或d3.select("#my_svg_widget")
即可获取已存在的 svg 并向其附加行。
$scope.$watch(function() {return self.myDataFromAPI}, function (objVal) {
console.log('objVal = ', objVal);
x = objVal.origin.split('.');
console.log("X = ", x)
var svgContainer = d3.select("svg");
var line = svgContainer.append("line")
.attr("x1", 0)
.attr("y1", 0)
.attr("x2", Number(x[2]))
.attr("y2", Number(x[3]))
.attr("stroke-width", 2)
.attr("stroke", "red");
},
true
);
工作代码在这里
相关文章:
- 我应该怎么做才能避免在网页上移动元素(html、css、jQuery)
- 更改元素HTML,但忽略最后一个子项
- 增加在选择元素HTML中搜索的时间
- Jquery无法获取元素html
- 从所选元素 html 上方的元素获取属性值
- 在 JS 的单选按钮元素 (HTML) 中使用 title 属性
- 如何在页面上播放每个音频元素(HTML,JQuery,Javascript)
- 我需要一种新的方法来检测元素 HTML 是否有更改
- 获取父元素 html 以及子内容
- AngularJS指令:如何在ng-repeat中动态更改元素html
- html 属性中的引号被标记为 ”来自元素.html()的结果
- 在指令's链接中替换angular元素html
- 如果元素有子元素html元素
- 如何下推表格中的元素- HTML
- 如何在纯javascript中使用变量插入数组值,如元素HTML
- jQuery textilate .js -如何“重置”元素HTML并重新启动动画
- 将元素HTML附加到新附加的textarea中
- 在添加类的情况下,CSS 3的过渡是否不能与模板元素(HTML 5)一起工作?
- jQuery没有更新DOM元素HTML
- 在jQuery中更快地替换元素HTML