2

我将 Jade 模板与 Angular JS 结合使用,并在 Angular 的控制器中定义了这样的转发器处理简单数组:$scope.ids = ['demo1', 'demo2']

.controls(ng-repeat="controlId in ids")
  <div id="{{$index}}">{{$index}}</div>

无论我做什么 Jade 都会尝试解析传递给 SELECT 标签的所有内容,因此它总是从标签的属性中删除 $index 变量。作为 HTML 的结果,我总是看到以下内容:

<div id="">0</div> // ID attribute is always empty because Jade replaces it
<div id="">1</div> // at the same time HTML of the tag was rendered correctly

问题:如何防止 Jade 解析此 HTML 属性并在结果 HTML 中打印字符串?

PS我尝试了以下语法,但它不起作用......建议?

id="|{{$index}}" // id is empty
id!="{{$index}}" // id is empty
id="!{{$index}}" // syntax error
id="!{{controlId}}" // syntax error
{:id => {{$index}}} // does not add ID at all

PPS 只是为了解释为什么我用 HTML 来搞乱 Jade - 我尝试使用“仅玉”语法,但它也不起作用:

.controls(ng-repeat="controlId in ids")
  .demo(id="{{$index}}") {{$index}}
4

2 回答 2

0

最近我发现这个讨论是由 Sangram 发起的:

ng-repeat 的 {{$index}} 在 angular 指令的链接器函数之后计算。$编译它?

我意识到 Sangram 对此是正确的——这不是 Jade 问题——这就是 Angular 渲染模板的方式。

有一个解决方案 - 在 $evalAsync 中调用链接函数 - 可能这是一个不错的选择,但在我的情况下,我需要立即设置控件的 ID,所以我想出了这个解决方案 - 如果我无法设置 ID - 我可以生成它 :

app.directive('tags', ['$rootScope', function($rootScope) {

    var controlIndex = 0;

    var linker = function(scope, element, attrs) {

    // *** Control ID *** //

        element[0].id = attrs.id || 'control' + (++controlIndex);

        ...
    }

    return {
        restrict: 'EA',
        templateUrl: 'tags/template.html',
        link: linker
    }
}]);
于 2013-10-22T16:29:06.697 回答
0

尽量防止这样的解析:

!{{$index}} <-- Escaped

参考这篇文章:如何让 Jade 停止 HTML 编码元素属性,并产生一个文字字符串值?

对于这个问题:https ://github.com/visionmedia/jade/issues/198

并说它是否有效!

于 2013-09-24T16:21:36.310 回答