【发布时间】:2016-07-14 01:22:48
【问题描述】:
如何从这样的相对路径导入 HTML 模板:
import customSelectHtml from "./custom-select.html!text";
TypeScript 编译器抱怨找不到模块。我试图创建一个环境模块定义,但它不允许模块名称中的相对路径。我使用 SystemJS 作为模块加载器。
【问题讨论】:
标签: import typescript ecmascript-6
如何从这样的相对路径导入 HTML 模板:
import customSelectHtml from "./custom-select.html!text";
TypeScript 编译器抱怨找不到模块。我试图创建一个环境模块定义,但它不允许模块名称中的相对路径。我使用 SystemJS 作为模块加载器。
【问题讨论】:
标签: import typescript ecmascript-6
这是不可能的。
由于打字稿中module 的定义,据我所知,在 ES6 javascript (import) 中。模块不能是 html。常见的方法是导入一个 javascript 模块,该模块导出一个包含 html、css 等的字符串。但这不是使用原始 html 导入文件。
也许你也想看看html imports,但那是完全不同的事情。
【讨论】:
我不了解 SystemJS,但这绝对可以使用 Webpack 和 html-loader
【讨论】:
您可以使用 require 语法导入它
1) 创建 app.d.ts 文件并要求定义,以便打字稿知道这是函数。 (您不需要添加任何附加库,systemJs 支持需要语法)
declare function require(params:string): any;
2) 现在您可以使用 var template = require('./custom-select.html!text')
我发现它更好,因为您可以使用 require 内联
var directive = {
template: require('./custom-select.html!text'),
scope: {}
}
【讨论】:
我没有使用 typescript,但我使用的是 ES6。可能对你有用。
我解决这个问题的方法是使用 ` ` 引号声明模板字符串。它对我来说很好,我很高兴知道是否有人认为这是一个坏习惯。
在带有 Angular(-ui-router) 的 sn-p 之下。
index.js
var indexTemplate = `
<div>
<h1>{{ Index page }}</h1>
</div
`
export {indexTemplate}
config.js
import { indexTemplate } from './index.js'
function config($stateProvider){
$stateProvider.state('index', {
url: '/',
controller: 'indexController',
template: indexTemplate
})
}
为了完整起见,这里假设 indexController 是在别处定义的。此外,此配置函数被导出到定义 app 的地方。但这一切都与问题无关。
【讨论】: