转换部分内容

时间:2016-03-29 17:12:48

标签: angularjs angularjs-directive angularjs-ng-repeat

我正在尝试创建一个"粘性表标题"我需要复制部分transcluded含义的组件。

根据我如何转换内容,它最多只能部分工作:使用$compile时,表达式会在基础数据发生变化时更新,但ng-repeat似乎根本不起作用。它甚至不是第一次渲染,更不用说稍后更新了。简单地添加我发现的部分内容似乎根本不起作用:element.append($(transcludedEl).find('.wrapper'));

为了说明我的观点,我使用相同代码的三个版本创建了一个plunkr:http://plnkr.co/edit/xkAkzl8ID3m5Ras3Ww31

  1. 第一种是超简单的直接重复重复,仅用于显示应该发生的事情。
  2. 第二个使用指令来转换其全部内容,但这不是我需要的。
  3. 第三个(以下转载)使用指令尝试仅包含部分内容,这是我需要的,但不起作用。
  4. 有趣的是:

    app.directive('stickyPartial', ['$compile', '$timeout', function($compile, $timeout) {
        return {
            restrict: 'E',
            transclude: true,
            template: '<div></div>',
            link: function(scope, element, attrs, controller, transclude) {
              transclude(scope, function(transcludedEl) {
                // this is what i want to achieve - not working          
    //            element.append($(transcludedEl).find('.wrapper'));
    
                // neither is this, though it does support expressions
                $compile($(transcludedEl).find('.wrapper'))(scope, function(clone) {
                  element.append(clone);
                });
              });
            }
        };
    }]);
    

    到目前为止,我已尝试了$compile.clone().html()的多种组合,但无济于事。我既不能从已编译的模板中获取工作的部分DOM树,也不能使用ng-repeat完整的有用部分HTML源,然后我可以手动编译。

    作为最后的手段,我可​​能会尝试在角度完成后复制DOM(之前似乎有效),然后每次相关模型数据更改时手动重复此过程。如果有另一种方式,想想,我非常想避免这种情况。

1 个答案:

答案 0 :(得分:0)

使用https://stackoverflow.com/a/24729270/2029017我找到了compile符合我想要的解决方案:http://plnkr.co/edit/V4yUbiAD9EAaaJXihziv