多个DOM操作的一个指令

时间:2014-07-30 15:00:03

标签: javascript angularjs dom angularjs-directive

我有一个包含两个不同区域的网页。

在第一个区域中,当用户点击此节点时,我会绘制一个力图( my-graph(data =" datagr"))图表我尝试更新第二个区域( {{datagr.info}} )。

控制器:

$scope.datagr = {nodes:nodes,links:links,info:"no info"};

HTML:

.row
  .col-xs-12
    {{datagr.info}}

...some code...

.col-sm-12.col-md-10
  my-graph(data="datagr")

指令:

angular.module("appDirectives", []).directive("myGraph", function() {
  return {
    restrict: 'E',
    scope: {
      data: '='
    },
    link: function (scope, element, attrs) {
      //values from controller
      var links = scope.data.links;
      var nodes = scope.data.nodes;

      ...some code...

      //add nodes
      var node = svg.selectAll(".node")
        .data(force.nodes())
      .enter().append("g")
        .attr("class", function(d) { return "node "+d.type+" "+d.status; })
        .on("click", function(d) {
          scope.data.info = d.type+" <br/> "+d.status;
          scope.$apply();
        })
        .call(force.drag);

    }
  };
});

{{datagr.info}} 中没有插入html时,这样可以正常工作。

我有什么选择在第二个区域插入HTML?

我应该创建另一个指令吗?

1 个答案:

答案 0 :(得分:0)

我找到了一个没有创建新自定义指令的解决方案:ngBindHtml(创建一个绑定,将innerHTML以一种安全的方式将表达式计算到当前元素中。

现在而不是

.col-xs-12
  {{datagr.info}}

我有

.col-xs-12(ng-bind-html="datagr.info")

此解决方案依赖于ngSanitize(angular-sanitize.js)一个额外的Angular模块。

这个问题仍然适用于任何其他方法。