Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单独html的多重转换_Html_Angularjs - Fatal编程技术网

单独html的多重转换

单独html的多重转换,html,angularjs,Html,Angularjs,我想把多个部分合并成一个指令。这是我如何设置它的想法 <div id="content" class="mainDirective"> <div class="sub"> <ul> <li>Everyone</li> <li>Development (3)</li> <li>Marketing</li

我想把多个部分合并成一个指令。这是我如何设置它的想法

<div id="content" class="mainDirective">
    <div class="sub">
        <ul>
            <li>Everyone</li>
            <li>Development (3)</li>
            <li>Marketing</li>
        </ul>
    </div>
    <div class="subButtons">
        <span class="csStIcon add" data-ng-click="addTeam()"></span>
        <span class="csStIcon edit" data-ng-click="editTeam()"></span>
        <span class="csStIcon delete" data-ng-click="deleteTeam()"></span>
    </div>
    <div class="main">
        <table>
            <thead>
                <tr><td>Name</td><td>Last name</td><td>Department</td></tr>
            </thead>
            <tbody>
                <tr><td>Lorem</td><td>Ipsum</td><td>Development</td></tr>
                <tr><td>Lorem</td><td>Ipsum</td><td>Development</td></tr>
                <tr><td>Lorem</td><td>Ipsum</td><td>Development</td></tr>
            </tbody>
        </table>
    </div>
</div>

  • 每个人
  • 发展(3)
  • 市场营销
姓姓系 Loremipsum开发 Loremipsum开发 Loremipsum开发
我的指令模板:

<div>
    <div class="left">
        <div data-ng-multi-transclude="sub"></div>
        <div class="bottomOptions">
            <span class="csStIcon collapse"></span>
            <div data-ng-multi-transclude="subButtons"></div>
        </div>
    </div>
    <div class="right">
        <div data-ng-multi-transclude="main"></div>
    </div>
</div>

最后的结果是:

<div>
    <div class="left">
        <div class="sub">
            <ul>
                <li>Everyone</li>
                <li data-ng-click="loadDepartment()">Development (3)</li>
                <li data-ng-click="loadDepartment()">Marketing</li>
            </ul>
        </div>
        <div class="bottomOptions">
            <span class="csStIcon collapse"></span>
            <div class="subButtons">
                <div class="subButtons">
                    <span class="csStIcon add" data-ng-click="addTeam()"></span>
                    <span class="csStIcon edit" data-ng-click="editTeam()"></span>
                    <span class="csStIcon delete" data-ng-click="deleteTeam()"></span>
                </div>              
            </div>
        </div>
    </div>
    <div class="right">
        <div class="main">
            <table>
                <thead>
                    <tr><td>Name</td><td>Last name</td><td>Department</td></tr>
                </thead>
                <tbody>
                    <tr><td>Lorem</td><td>Ipsum</td><td>Development</td></tr>
                    <tr><td>Lorem</td><td>Ipsum</td><td>Development</td></tr>
                    <tr><td>Lorem</td><td>Ipsum</td><td>Development</td></tr>
                </tbody>
            </table>
        </div>
    </div>
</div>

  • 每个人
  • 开发(3) 营销部
姓姓系 Loremipsum开发 Loremipsum开发 Loremipsum开发

这在angular中可能吗?

我使用transclude函数提出了这个指令:

app.directive('mainDirective', function($compile) {
    var template = ['<div>',
                    '    <div class="left">',
                    '        <div data-ng-multi-transclude="sub"></div>',
                    '        <div class="bottomOptions">',
                    '            <span class="csStIcon collapse"></span>',
                    '            <div data-ng-multi-transclude="subButtons"></div>',
                    '        </div>',
                    '    </div>',
                    '    <div class="right">',
                    '        <div data-ng-multi-transclude="main"></div>',
                    '    </div>',
                    '</div>'].join('\n');
    return {
        restrict: 'C',
        transclude: true,
        template: template,
        link: function(scope, element, attr, model, transclude) {
            var places = element.find('[data-ng-multi-transclude]');
            console.log(element);
            places.each(function() {
                var self = $(this);
                var class_ = self.data('ng-multi-transclude');
                transclude(scope.$new(), function(clone, scope) {
                    var item = clone.closest('.' + class_);
                    $compile(item)(scope).appendTo(self);
                });
            });
        }
    };
});
您将无法获得那些具有
data ng multi-transclude
属性的原始包装div


此外,您还需要包含jQuery(始终在Angular之前,因为否则您会得到jQLite)。

我在编写的组件中使用了多个“转换”。实际上,这只是嵌套指令,但它们可以完成任务:

更具体地说,请查看以下文件:


我最终也需要这个功能,所以我写道——有趣的是,我当时没有看到这个问题,只是幸运地得到了相同的名字


用法几乎和你的问题描述的一样;唯一的区别是使用
name
属性来选择要填充的“孔”,而不是
class
属性。

这已添加到angular 1.5中

self.replaceWith($compile(item)(scope));