【问题标题】:angular $compile a dive ith ng-repeat insideangular $compile 一次潜水,里面有 ng-repeat
【发布时间】:2017-06-19 15:20:04
【问题描述】:

我有以下问题:

我有一些表格可以使用 angular 和 ng-repeat 自动生成:

<article id="search-performance-table" class="container-fluid istable">
            <div class="printOptionElements printshow newpage size100"></div>
            <!-- Start Table Simple-->
            <section class="row">
                <div class="col-md-12">
                    <div class="table-responsive" ng-controller="SmartTableController">

                        <table id="table-performance-suche" class="table table-hover" st-table="displayed" st-safe-src="tablePerformanceSearch">
                            <thead>
                                <tr class="active">
                                    [... Header Elements ...]
                                </tr>
                            </thead>
                            <tbody>
                                <tr ng-repeat="element in displayed">
                                    <td>{{element.date| date}}</td>
                                    <td>{{element.requests| number:0}}</td>
                                    <td>{{element.clicks| number:0}}</td>
                                    <td>{{element.clickRate| percentage:2}}</td>
                                    <td>{{element.carts| number:0}}</td>
                                    <td>{{element.buys| number:0}}</td>
                                    <td>{{element.conversionRate| percentage:2}}</td>
                                    <td>{{element.responseTime| number:2}} ms</td>
                                </tr>
                            </tbody>
                            <tfoot class="font-blue-grey-light" ng-model="tablePerformanceSearchTotal">
                                <tr class="active">
                                [... Footer Elements ...]
                                <tr>
                                    <td colspan="12" class="text-center">
                                        <div st-pagination="" st-items-by-page="$root.itemsByPage1_table1" st-displayed-pages="7"></div>
                                    </td>
                                </tr>
                            </tfoot>

                        </table>
                    </div>
                </div>
            </section>
            <!-- Ende Table Simple -->
        </article>

现在我想在这张桌子上生成一个打印视图。为此,我复制了文章元素,将其放在一个数组中并将其附加到所属的纸张上。例如我想要第3页的表格,我将其复制并粘贴到元素$("#site1")上。

pageElements[pageNumber][elementOnPage] = "<div id='"+this.parentNode.id+"' class='thisIs100 printPaper'>"+$("#"+this.parentNode.id).html()+"</div>";

for (j=0; j < pageElements.length; j++) {
            for (i=0; i < pageElements[j].length; i++) {
                $("#site"+j).append(""+pageElements[j][i]+"");
            }
        }

现在我有我的文件,里面有元素。旧元素被隐藏。但是 angular 不起作用,因为它不在 $scope 中。我将元素编译到作用域中。

$( ".printOptionElements" ).each(function( index ) {
            var parentid = this.parentNode.id;
            $compile($("#"+parentid).children().not(".printOptionElements"))($scope);
            $scope.$apply();
        });

这适用于页脚中的简单角度变量,但 ng-repeat 不起作用。我只得到:

<tbody>
                                <!-- ngRepeat: element in displayed -->
                            </tbody>

有没有办法解决这个问题?在编译元素后,我尝试使用$scope.$digest()$apply()。但它不起作用。

我希望有人可以帮助我。

【问题讨论】:

    标签: angularjs compilation html-table


    【解决方案1】:

    我认为当你在 Angular 中使用 JQuery 时,你必须用 JQuery 替换 $ 尝试:

    pageElements[pageNumber][elementOnPage] = "<div id='"+this.parentNode.id+"' class='thisIs100 printPaper'>"+jQuery("#"+this.parentNode.id).html()+"</div>";
    
    for (j=0; j < pageElements.length; j++) {
                for (i=0; i < pageElements[j].length; i++) {
                    jQuery("#site"+j).append(""+pageElements[j][i]+"");
                }
            }
    

    还有:

    jQuery( ".printOptionElements" ).each(function( index ) {
                var parentid = this.parentNode.id;
                $compile(jQuery("#"+parentid).children().not(".printOptionElements"))($scope);
               if(!$scope.$$phase){
                     $scope.$apply();
               }
            });
    

    先试试看好不更好? :)

    你在控制台能看到什么? 带有 $scope 变量的部分在控制器中?

    【讨论】:

    • 您好,谢谢您的回答。我用 jQuery 替换了每个 $。但什么也没有发生。但是 Angular 中的其他 jqueryelements 也可以与 $ 一起使用,所以我认为这不是问题所在。但是感谢您的帮助
    • 您已将 $scope.$apply() 放入 $$phase 测试中?
    • 是的 "jQuery( ".printOptionElements" ).each(function( index ) { var parentid = this.parentNode.id; $compile(jQuery("#"+parentid).children(). not(".printOptionElements"))($scope); if(!$scope.$$phase){ $scope.$apply(); } });"
    • 你的控制台里有 lignes 吗?你可以在 chrome 上使用一个有用的插件,"ng-inspector" 观看它;) [link] chrome.google.com/webstore/detail/ng-inspector-for-angularj/…
    • 我在控制台上有一条错误消息,但我不明白,它不会影响输出(直到现在?)。类型错误:无法读取compositeLinkFn (ajax.googleapis.com/ajax/libs/angularjs/1.3.17/…) 处未定义的属性'childNodes' [...] 在compositeLinkFn (ajax.googleapis.com/ajax/libs/angularjs/1.3.17/… id="contentarea" ng-view="" class="ng-scope"> 这是错误消息。但在 ng-repeat 的情况下,它可以正常工作,并将每个角度元素编译到范围内。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 2014-11-30
    相关资源
    最近更新 更多