【问题标题】:Angular compile template error on local project and jsFiddle, but working fine in Plunker本地项目和 jsFiddle 上的 Angular 编译模板错误,但在 Plunker 中工作正常
【发布时间】:2014-06-02 17:43:09
【问题描述】:

我注意到我的角度控制器正在增长,并且一直在尝试重构和使用指令和服务。

但是,在一种情况下,我正在尝试创建一个在 plunker 中似乎运行良好的指令,但是我在本地应用程序和 jsFiddle 中看到以下错误:

Error: [$compile:tplrt] http://errors.angularjs.org/1.2.8/$compile/tplrt?p0=getEmptyCells&p1=

Plunker 链接:http://plnkr.co/edit/e11zA8LKvoPTgTqW2HEE?p=preview

jsFiddle 链接(在 Firebug 中可以看到错误):http://jsfiddle.net/oampz/8hQ3R/14/

指令:

app.directive('getEmptyCells', function () {
return {
    restrict: 'EA',
    replace: true, 
    template: '<td ng-repeat="emptyCell in getEmptyCells(payments.Details.length)" class="empty">No Payment</td>',
    scope: {
      'payments' : '=getEmptyCells'
    },
    link: function (scope, elem, attr) {
      scope.getEmptyCells = function (len) {
        var emptyCells = [];
        for (var i = 0; i < 12 - len; i++) {
          emptyCells.push(i);
        }
        return emptyCells;
      };
    }
};
});

HTML:

<table>
    <tr>With Directive:</tr>
    <tr ng-repeat="payments in MyPayments">
            <th>{{payments.name}}</th>
            <td ng-repeat="paymentAmount in payments.Details.slice(0, 12)">{{ paymentAmount }}</td>
            <td get-empty-cells="payments"></td>
    </tr>
</table>

当我删除时:

template: '<td ng-repeat="emptyCell in getEmptyCells(payments.Details.length)" class="empty">No Payment</td>',

错误消失了,但自然不会产生预期的功能/输出。

我对可能导致这种情况的原因感到困惑。

【问题讨论】:

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


    【解决方案1】:

    我认真地认为这是 jsfiddle 造成的问题。像 jsfiddle 或 plunker 这样的任何服务在模拟真实设置时都会遇到麻烦,同时仍然提供嵌入式输出、外部文件加载等功能。有些解决方案似乎比其他解决方案更好,虽然我长期以来一直是 jsfiddle 的忠实用户 - AngularJS 项目似乎在 plunker 中工作得更好,尤其是在开始时可以选择 angular 模板。

    我认为你关于为什么它不起作用的问题实际上是一个关于为什么 jsfiddle 不能使它起作用的问题,即使我不想用“那没关系”来回答问题,我认为你应该专注于解决你的问题而不是 jsfiddle 的问题,现在只使用其他服务(如 plunker);)

    编辑:如果我猜测(对于 SO 来说通常不是一个好主意),我会说 jsfiddle 以某种方式弄乱了模板,可能会在模板中添加一个注释节点,从而打破了角度模板的“一个根节点”要求。

    【讨论】:

    • 感谢您的详细回复,我已切换到使用 Plunker,但我仍然在本地计算机的应用程序上看到该错误(可以在 jsFiddle 中看到)。
    • 哦,所以您的解决方案在 plunker 中也不起作用?如果错误仅在 jsfiddle 解决方案中可见,我认为错误不在您的代码中,而是在 jsfiddle 管道代码中
    • 如上所述,解决方案在 Plunker 中很好,但完全相同的解决方案在 jsFiddle 中失败,这显示了我在本地计算机上的应用程序中看到的相同错误。
    • 现在我明白了。您是通过 file:// 还是通过网络服务器运行文件?尝试弄乱文件的编码。最好尝试 UTF-8,但它会编码与文本混淆 -> 破坏“一个根节点”的东西
    • 我不明白为什么服务会有所帮助。虽然您的元数据可能会说 UTF-8,但实际文件可能不是。尝试使用可以处理编码的编辑器打开/重新编码/保存它们。我最喜欢的是 SublimeText2
    猜你喜欢
    • 2019-08-08
    • 1970-01-01
    • 2012-10-31
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    相关资源
    最近更新 更多