$ compile返回对象

时间:2015-09-24 13:28:51

标签: javascript html angularjs

所以我调用一个html模板,并希望用angular绑定数据,所以我得到数据绑定,我得到html,当我尝试编译它将返回所有html绑定但在(我认为)对象,我该怎么做才能使它成为HTML。

这是代码

$.get("file.html", function(partial){

        var scope = $rootScope.$new();
        scope.data = result;

        var el = angular.element(partial);

        var compiled = $compile(el)(scope);
        var finalHtml = el[0];


        $timeout(function(){
            var calendar = window.open();
            calendar.document.write(finalHtml);
            calendar.focus();
            calendar.print();
        });
    });

我已经尝试过.html .toString String()没有效果

先谢谢你

1 个答案:

答案 0 :(得分:4)

您的compiled变量是一个可插入文档的角度jQuery或jqlite元素。如果你想获得它的html,你可以使用底层节点上的outerHTML属性(通过抓取第一个数组元素compiled[0]得到底层节点) - https://developer.mozilla.org/en-US/docs/Web/API/Element/outerHTML < / p>

var compiled = $compile(el)(scope);
// scope.$digest() // only call if not within an angular $digest already
$timeout(function() {
  var finalHtml = compiled[0].outerHTML;
  ...
}

根据文档&#34;链接之后,直到调用$ digest后才会更新视图,这通常由Angular自动完成。&#34;因此,您必须手动调用scope.$digest()或实际使用一个有角度的API来使用$http执行请求,或者最好使用$templateRequest,例如@ThinkingMedia建议。运行角度$ digest后,您可以访问更新后的视图。

我在这里创建了一个plunker,它使用AngularJS api显示它是如何正常工作的:http://plnkr.co/edit/rFcfgB3FWhsfyySfr0rU?p=preview

我还改变了弹出窗口的打开方式,以处理弹出窗口的安全隐含。