ngRepeat

时间:2017-01-13 15:52:01

标签: javascript angularjs

我在ng-repeat指令中进行翻译时遇到问题。 Angular在模板中找不到.transclude元素,因此不会发生替换。我相信这是因为ng-repeat在转换时删除了.transclude。我想知道如何在ng-repeat获取占位符之前替换或如何以任何其他方式解决此问题。

旁注:如果我改用ng-transclude指令,那么代码就是 按预期工作,但后来我必须使用$ parent {{$ parent.item.name}}来访问我不喜欢的值。

以下是我的代码的缩小版本:

HTML

<div mydir="items">
    {{item.name}}
</div>

template.html

<div ng-repeat="item in items">
    <div class="transclude"></div>
</div>

指令

app.directive("mydir" , function(){
    return {
        templateUrl : "template.html",
        transclude : true,
        scope : {
            items: "=mydir"
        },
        link : function($scope , $element , attrs , $ctrl , $transclude){
            $transclude(function($content){
                $element.find(".transclude").replaceWith($content);
            });
        },
    };
})

编译前的预期结果

<div mydir="items">
    <div ng-repeat="item in items">
        {{item.name}}
    </div>
</div>

1 个答案:

答案 0 :(得分:0)

我认为这是一个可以让你到达目的地的选项。基本上,它抓取你的html指令MkDir(List.RootFolder.PathName+'\New Folder'); List.Update; List.ItemIndex:=0; List.HideSelection:=True; while List.ItemIndex<List.Items.Count-1 do begin // Find the New Folder if List.SelectedFolder.PathName=(List.RootFolder.PathName+ '\New Folder') then begin //Set the Folder in Edit mode & exit the loop List.Items[List.ItemIndex].EditCaption; Exit; end else //Inc the Index List.ItemIndex := List.ItemIndex+1; end; List.HideSelection:=False; 的内容,并在指令的编译函数中构建一个动态模板。

{{ item.name }}

这是demo