2
'use strict';

directives.directive('primaryClient', function() {
  return {
    restrict: 'A',
    templateUrl: 'views/directives/primary-client.html',
    scope: {
      'client': '='
    }
  };
});

我有一个简单的指令,它只是用模板文件的内容替换一个元素。如上图,坏了。Chrome 中的错误是Error: Unexpected request: GET views/directives/primary-client.html. 添加一个前导斜杠(即/views/directives/primary-client.html)解决了这个问题。

然而

在我的测试中,我绝对无法让它与前导斜杠一起工作。当我省略前导斜杠时,我会加载文件并通过测试,但这当然会破坏实际功能。

如果需要,我可以从测试中共享更多代码,但是加载模板的测试示例似乎都显示了省略前导斜杠的指令。我已经<base href="/">在 index.html 中设置了。有什么我做错了导致斜线的原​​因吗?

4

1 回答 1

1

我最近通过相对路径和测试遇到了这个问题。在我的指令中,我总是有前导斜杠:

templateUrl: '/dist/js/templates/my-template.html'

这在我的应用程序中运行良好,但是当我运行测试时Unexpected request: GET出现错误。

我能够使用karma-ng-html2js-preprocessor并通过使用相对文件路径和非相对文件路径来解决这个问题,直到它正常工作。

基本上,在我的业力配置中,对于我拥有的预处理器(注意在公开之前没有斜线):

preprocessors: {
        'public/js/templates/**/*.html': ['ng-html2js']
    },

在我的业力配置文件列表中,我有(同样,在公开之前没有斜线):

files: [
        'public/js/templates/**/*.html'
    ],

然后我在我的业力配置中设置预处理器,如下所示(注意 dist 之前的斜线,这是重要的部分)

ngHtml2JsPreprocessor: {
        stripPrefix: 'public',
        prependPrefix: '/dist',
        moduleName: 'dir-templates'
    }

这意味着预处理器将获取我的模板文件public/js/templates/my-template.html并将其放入缓存中/dist/js/templates/my-template.html

然后在我的实际测试中,我导入了特殊模块dir-templates,如上面预处理器的 moduleName 下定义的那样,如下所示:

beforeEach(
    module('app')
);

beforeEach(
    module('dir-templates')
);

一切正常!

于 2016-04-04T22:23:06.247 回答