【问题标题】:angular, directives not running on content being brought in through json角度,指令不在通过 json 引入的内容上运行
【发布时间】:2014-12-02 16:14:15
【问题描述】:

有点奇怪的问题,我不完全确定发生了什么,所以我会尽量说清楚。

我通过 json 对象引入 html 内容并将其放置在 div 中。我遇到的问题是,当我通过指令引入运行 javascript 的 html 时,它似乎没有运行。例如 - 我正在玩这个 http://cmaurer.github.io/angularjs-nvd3-directives/ ,一个 d3 角度指令。

如果我在模板上有 html,它可以正常工作 - 我正在使用他们页面中的一个示例,看起来像这样 -

<nvd3-stacked-area-chart data="exampleData" id="exampleId" showXAxis="true" showYAxis="true" showControls="true" width="700" height="200"> <svg></svg> </nvd3-stacked-area-chart>

放置在页面上时效果很好,但是当我通过 json 将其引入时,似乎指令(或角度?)没有在其上运行。

作为参考,json 的一部分是这样进来的 -

  'content' : '<nvd3-stacked-area-chart data="exampleData" id="exampleId" showXAxis="true" showYAxis="true" showControls="true" width="700" height="200"> <svg></svg> </nvd3-stacked-area-chart>',

然后像这样被绑定

ng-bind-html="widget.content"

这似乎工作正常,如果我检查元素我可以看到正确的 html 坐在那里。我的控制器中有一个 $sce.trustAsHtml 以确保它被正确转义。

所以我不确定如何解决这个问题,因为没有抛出特定的错误,所以我不确定它是有角度的,还是指令,还是事件的顺序?一旦将 html 内容加载到 div 中,是否有办法重新初始化 d3 指令?

我不知道从哪里开始,所以我非常感谢任何见解。感谢您的阅读!

【问题讨论】:

    标签: javascript json angularjs


    【解决方案1】:

    当您加载通过电汇接收的内容时,angular 已经完成了页面的编译和链接。因此,您需要告诉它重新编译。看看这个 SO 并尝试在收到内容并将其放入 div 后手动调用 $compile:How do I make angular.js reevaluate / recompile inner html?

    请记住,这是一项相当棘手的工作,您应该真正检查您正在做的事情的安全性。

    【讨论】:

    • 只是补充一下,看看这个关于$compileng-bind-html的问题:stackoverflow.com/questions/20623118/…
    • 我能够根据您的建议找到解决方案。谢谢!
    • 我很高兴它有帮助:)
    猜你喜欢
    • 2017-02-26
    • 2015-12-18
    • 2013-12-04
    • 1970-01-01
    • 2016-09-05
    • 2016-06-27
    • 2015-05-03
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多