angularjs – 使用nginclude时避免使用额外的DOM节点

前端之家收集整理的这篇文章主要介绍了angularjs – 使用nginclude时避免使用额外的DOM节点前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在努力思考如何使用ng-include不使用额外的DOM元素,因为我正在从纯HTML演示中构建一个角度应用程序。我正在使用非常纤薄的HTML,使用完全开发的,严格的DOM耦合CSS(由SASS构建),并且我想不惜一切代价避免重构。

这是实际的代码

<div id="wrapper">
    <header
        ng-controller="HeaderController"
        data-ng-class="headerType"
        data-ng-include="'/templates/base/header.html'">
    </header>
    <section
        ng-controller="SubheaderController"
        data-ng-class="subheaderClass"
        ng-repeat="subheader in subheaders"
        data-ng-include="'/templates/base/subheader.html'">
    </section>
    <div
        class="main"
        data-ng-class="mainClass"
        data-ng-view>
    </div>
</div>

我需要< section>成为一个重复元素,但有自己的逻辑和不同的内容内容和重复次数都取决于业务逻辑。如您所见,将ng-controller和ng-repeat放在< section>上。元素不起作用。然而,插入一个新的DOM节点会是什么,这正是我想要避免的。

我错过了什么?这是最佳做法还是有更好的方法

编辑:只是为了澄清评论中的问题,我试图生成的最终HTML将是:

<div id="wrapper">
    <header>...</header>
    <section class="submenuX">
        some content from controller A and template B (e.g. <ul>...</ul>)
    </section>
    <section class="submenuY">
        different content from same controller A and template B (e.g. <div>...</div>)
    </section>
    <section class="submenuZ">
        ... (number of repetitions is defined in controller A e.g. through some service)
    </section>

    <div>...</div>
</div>

我想使用相同模板B(subheader.html)的原因是代码清洁度。我设想subheader.html有一些ng-switch来返回动态内容

但基本上,底层静默是:有没有办法透明地包含模板的内容,而不使用DOM节点?

EDIT2:解决方案需要可重用。 =)

其他一些答案建议替换:true,但请记住,替换:模板中的true是 marked for deprecation

相反,在an answer to a similar question,我们找到了另一种选择:它允许你写:

<div ng-include src="dynamicTemplatePath" include-replace></div>

自定义指令:

app.directive('includeReplace',function () {
    return {
        require: 'ngInclude',restrict: 'A',/* optional */
        link: function (scope,el,attrs) {
            el.replaceWith(el.children());
        }
    };
});

(cut’n’paste来自其他答案)

原文链接:/angularjs/143854.html

猜你在找的Angularjs相关文章