javascript - AngularJS 指令的 link() 函数中的 DOM 元素未准备好

标签 javascript angularjs angularjs-directive

我正在创建一个 AngularJS 指令,它应该有一个 C3.js基于它的图表。问题是 C3 库看不到它应该附加到的 DOM 元素。该指令的 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 更改了代码示例并添加了指令模板中的相关行。

最佳答案

如果要操作尚未生成的 dom,请在链接函数中使用 $timeout 函数。参见 this

关于javascript - AngularJS 指令的 link() 函数中的 DOM 元素未准备好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24744311/

相关文章:

javascript - 动态添加特定属性到元素

javascript - 多个 ng-app 如何以 Angular 工作(为什么这样的行为?)

javascript - 在 js 文件中有一系列命名函数是不好的做法吗?

javascript - 用数字 0-10 + 小数在 jquery 中动画圆形进度条

javascript - AngularJS 搜索框中的粗体语句

javascript - AngularJS:如果只按下输入键

javascript - knockout js中如何设置dropdown的初始默认值

javascript - 什么是纯 HTML5 应用程序?

javascript - 在 angular-chart.js 中使用渐变颜色

javascript - Angularjs指令创建点击事件