我正在创建一个AngularJS指令,该指令应该包含一个基于C3.js的图表。问题是C3库无法看到它应该依附的DOM元素。该指令的
该指令的模板包含以下内容:
问题在于
如果我从浏览器的控制台甚至从一些
是否有一种方法可以在不使用类似于
更新时间是 2014-07-15 15:33,已更改代码示例并添加了指令模板中的相关行。
link
函数大致如下:link: function(scope, element, attrs) {
scope.someid = 'id';
scope.chart = c3.generate({
bindto: "#somechart"+scope.someid,
data: {
columns: [
['data1', 30, 200, 100, 400, 150, 250],
['data2', 50, 20, 10, 40, 15, 25]
]
}
});
console.log($("#somechart"+scope.someid).size()); // this is a test, outputs 0
}
该指令的模板包含以下内容:
<div id="#somechart{{ scope.someid }}">...</div>
问题在于
c3.generate()
的 bindto
无法看到 #somechartid
。 我放置了一个 console.log()
,输出为0,这意味着在调用 link
函数时该元素目前不在 DOM 中。如果我从浏览器的控制台甚至从一些
ng-click
调用相同的图表生成代码,则会呈现图表。是否有一种方法可以在不使用类似于
$timeout
的解决方案的情况下克服此问题?更新时间是 2014-07-15 15:33,已更改代码示例并添加了指令模板中的相关行。
templateUrl
提供。涉及到的DOM元素出现在模板中,它的id
属性被指定为id="#somechart{{ data.id }}
。 - Chief Crocodile Wrestler#
。那是个笔误,抱歉,已经修复了。我更新了代码并包括了模板中相关的行。问题在于我无法在链接函数中初始化C3图表,因为图表的div
尚未出现在DOM中。如果我稍后尝试通过某些ng-click
或其他方式来完成它,它就可以工作。 - Chief Crocodile Wrestler