捕获templateUrl路径错误

时间:2014-10-21 06:18:51

标签: angularjs angularjs-directive

我在指令中实现了一个自定义模板,如下所示:

  .directive('card', function() {
      return {
          restrict: 'E',
          replace: true,
          templateUrl: function(element, attrs) {
              return '/app/templates/' + attrs.cardtype + '.html';
          }
      };
  });

生成指令的主模板如下所示:

<card ng-repeat="card in cards" cardtype="{{card.cardtype}}"></card>

注意我正在使用“cardtype”属性来选择合适的模板,然后在指令中假设模板名称。

只要cardtype属性解析为模板中的html文件,这样就可以正常工作。但是,如果文件不存在,我会收到错误:

Error: [$compile:tpload] Failed to load template: /app/templates/{{card.cardtype}}.html

为了呈现默认模板,捕获此错误的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我会尝试问$templateCache,这个模板是否存在。如果您不使用模板缓存,我强烈建议您使用它。您可以设置a grunt task来扫描所有.tpl.html文件并设置模板缓存以供使用。通过这种方式,没有真正的HTTP请求将被触发以获取模板。

有关如何使用templateCache的一个很好的示例,请参阅ng-boilerplate (ngbp)