AngularJS编译静态模板

时间:2013-09-02 20:55:39

标签: twitter-bootstrap angularjs

我有一个模板,我已将其包含在放入$ templateCache的视图中。

<script type="text/ng-template" id="ratesPopover">
    <table class="rate-table">
        <tr ng-repeat="rate in plan.rates">
            <td>Rate</td>
            <td>{{rate}}</td>
        </tr>
    </table>
</script>

然后我有一个指令,我想在传入范围的情况下编译模板,但我不想让模板绑定。我只是希望$ compile服务将模板编译为HTML的静态字符串,因此我可以将其添加到data-content属性中的Twitter Bootstrap Popover。不需要双向绑定。

var template = angular.element('<div>' + $templateCache.get('ratesPopover') + '</div>'),
    popover = $compile(template)(scope);

element.attr('data-content', popover.html());

我在显示弹出窗口时看到的是没有插入变量的编译模板。关于我可能做错的任何想法?

2 个答案:

答案 0 :(得分:3)

尝试注入$interpolate模块,然后执行

var template = '<div>' + $templateCache.get('ratesPopover') + '</div>',
    popover = $interpolate(template)(scope);

element.attr('data-content', popover);

答案 1 :(得分:0)

这个问题很老,但我的回答可能对其他人有帮助,我最近遇到了同样的问题。

要插入执行范围所需的值。$ apply:

var template = angular.element('<div>' + $templateCache.get('ratesPopover') + '</div>'),
    popover = $compile(template)(scope);

scope.$apply(function () {
    // popover is now interpolated
});

如果你已经处于$ digest周期,那么调用$ apply将引发错误,在这种情况下你只需要等到摘要周期结束:

var template = angular.element('<div>' + $templateCache.get('ratesPopover') + '</div>'),
    popover = $compile(template)(scope);

$timeout(function () {
    // popover is now interpolated
});