gpt4 book ai didi

angularjs - Dygraphs 不适用于 ng-repeat

转载 作者:行者123 更新时间:2023-12-02 10:20:11 25 4
gpt4 key购买 nike

我是 AngularJS 新手,正在使用 dygraphs 构建仪表板.

尝试将 example code来自 dygraphs 网站的 ng-repeat-list,只是为了测试。预计 y 中的每个 x 都有相同的样本图。不幸的是,图表没有被绘制,只有轴,控制台没有显示任何错误。

<li ng-repeat="x in y">
<div id="graph">
<script>
new Dygraph(document.getElementById("graph"),
[ [1,10,100], [2,20,80], [3,50,60], [4,70,80] ],
{ labels: [ "x", "A", "B" ] });
</script>
</div>
</li>

如果我删除 ng-repeat,它仍然可以工作(单个图) - 所以 dygraphs 代码是有效的。当然,像我在这里那样直接在 View 中绘制图形是没有意义的,我仍然想知道为什么它不起作用。我在这里遗漏了一些一般性的观点吗?

最佳答案

你的问题是 Angular 会重复你的 <div id="graph"> n次。所以你现在有 n 个 id 为“graph”的 div,它们是 sibling 。因此,当您调用document.getElementById('graph')时,效果不太好。

也就是说,我也不知道 ng-repeat 中的脚本标签的工作效果如何,这似乎是一个非常奇怪的用例。

执行此操作的正确方法(与所有 DOM 相关操作一样)是使用指令。这是一个例子:

Javascript:

var myApp = angular.module('myApp',[]);

myApp.controller('MyCtrl', function($scope) {
$scope.graphs = [
{
data: [ [1,10,100], [2,20,80], [3,50,60], [4,70,80] ],
opts: { labels: [ "x", "A", "B" ] }

},
{
data: [ [1,10,200], [2,20,42], [3,50,10], [4,70,30] ],
opts: { labels: [ "label1", "C", "D" ] }

}
];
});

myApp.directive('graph', function() {
return {
restrict: 'E', // Use as element
scope: { // Isolate scope
data: '=', // Two-way bind data to local scope
opts: '=?' // '?' means optional
},
template: "<div></div>", // We need a div to attach graph to
link: function(scope, elem, attrs) {

var graph = new Dygraph(elem.children()[0], scope.data, scope.opts );
}
};
});

HTML:

<div ng-controller="MyCtrl">
<graph ng-repeat="graph in graphs" data="graph.data" opts="graph.opts"></graph>
</div>

JSFiddle

希望这有帮助!

关于angularjs - Dygraphs 不适用于 ng-repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21468244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com