1

我只是想知道是否可以阻止 angularjs 指令的编译?

我使用 jQuery Slick Grid 插件在我的网站中显示一些数据网格,并且我想出了一种方法来轻松定义带有包含 HTML 的嵌套指令的单元格模板。

问题是这个 HTML 代码是用来作为模板的,但是 AngularJS 在网格初始化之前编译它!(虽然看起来合乎逻辑......)

提前致谢 !

编辑:这是我的指令的一个例子。

<div class="datagrid" my-datagrid="o in collection">
    <div my-datagrid-column="col1">
         <div>{{o.col1}}</div>
    </div>
    <div my-datagrid-column="col2">
         <div custom-directive-with-transclusion="foobar">{{o.col2}}</div>
    </div>
</div>

所以在这里,我有一个父指令my-datagrid,其中包含几个my-datagrid-column描述网格每一列的指令。这些指令节点的 Eechmy-datagrid-column包含 HTML 内容,其目的是用作网格单元格的模板,在它们将被渲染时

问题在于,引擎在指令创建 Datagrid之前custom-directive-with-transclusion“看到”并编译、嵌入指令。my-datagrid

所以我的datagrid-column指令得到一个已经编译的单元格“模板”......我不想要那个,我想自己用$compile服务编译每个单元格。

也许这不是这样做的方法,也许我完全走错了路。我只是想避免在 Javascript 控制器中描述一些丑陋的引号之间的单元格模板并转义所有内容,例如:

template[0] = '<div>this is my ugly template {{myCol1}} of my first column</div>';
template[1] = '<div>this is my ugly template {{myCol2}} of the 2nd column</div>';
4

2 回答 2

0

两个选项:

  1. 不要使用 {{}},而是使用另一个符号来表示这些。然后 Angularjs 将忽略它们。在您的指令中,搜索符号并将其替换为 {{}}。

  2. 看一下角度模板字符串的一次性渲染我使用这种技术将角度指令放置在单元格中并且效果很好。

祝你好运。

于 2014-02-22T17:18:19.307 回答
0

链接完成后你不能停止编译过程,但是你可以从 DOM 中取出元素(取消链接元素,它会阻止编译过程),就像 ng-if 指令一样,在这里你可以看到 ng-如果代码: https ://github.com/angular/angular.js/blob/master/src/ng/directive/ngIf.js

于 2015-11-30T22:33:16.167 回答