2016-04-15 19 views
19

タイトルとしてもできるかと思います。TypeScriptを使用してHTMLファイルを文字列としてインポートすることはできますか?

たとえば、Angular2プロジェクトで作業しており、httpリクエストが少なくなるようにテンプレートを外部URLとして設定しないようにしたいとします。それでも、十分に大きいか、デザイナーが開発者とは異なるファイルで作業してほしいので、コンポーネント内にすべてのHTMLを記述したくありません。だからここ

は最初のソリューションです:template.html.ts はこのような何かに.TSするファイルを変換

ファイル:

export const htmlTemplate = ` 
    <h1>My Html</h1> 
`; 

その後、私のコンポーネントに私ができますこれを次のようにインポートします。

import { Component } from 'angular2/core'; 
import {RouteParams, RouterLink} from 'angular2/router'; 
import {htmlTemplate} from './template.html'; 

@Component({ 
    selector: 'home', 
    directives: [RouterLink], 
    template: htmlTemplate, 
}) 

あなたはIDE HTMLインテリジェンスを失っているので、これはHTMLテンプレートを作成するデザイナー/ devにとっては悪いことです。私が達成しようとしている何

の.htmlファイルやない.TSをインポートする方法を見つけることです。

したがって、.htmlファイルをTypeScriptの文字列としてインポートすることは可能ですか?

import "template.html"; 

@Component({ 
    selector: 'home', 
    directives: [RouterLink], 
    template: require("template.html"), 
}) 

これはあなたのコンポーネントの依存関係リストに「template.html」が含まれますと、あなたはあなたのビルダー(実際には、それが持つ、より理にかなっているとの同梱することができます:

+0

私はこれを達成するために何をやりましたかさwebpackで 'require'を使ってhtmlファイルを作成し、' template:require( 'component.html') 'を使って文字列としてインポートします。 –

+0

はい、それはアプローチです。あなたの追加にも感謝しますが、私もそれと一緒にプレイし、私はあなたに私の考えを知らせます。 –

+0

あなたが探している解決策ではありませんが、gulp-angular-embed-templatesを使用して、ビルド時にjsクラスにhtmlテンプレートを埋め込みます。 – brando

答えて

8

あなたは今、これを行うことができますamd

しかし、あなたが示唆したように、webpackを使用することをお勧めします。

declare module "*.html" { 
    const content: string; 
    export default content; 
} 

などのようにそれを使用します:

import * as template from "template.html"; 

@Component({ 
    selector: 'home', 
    directives: [RouterLink], 
    template: template 
}) 
+3

何らかの理由で私はこれが正しいとは思わない。インポート&ファイルが奇妙で正しいアプローチではないように見える必要があります。それでもあなたの答えをありがとうが、私もそれをテストします。 –

+0

「モジュールXが見つかりません」というエラーが表示されます。この答えはどのバージョンのタイスクリプトですか? –

+1

@BryanRaynerここをクリックhttps://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#wildcard-character-in-module-names – Veikedo

-1

は今、あなたがそうのようなhtmlモジュールを宣言することができ、このstarter pack


UPDATEを見てみましょう@ Veikedoのalmより上の答えオスト作品。 * as部分は、モジュール全体がポインタtemplateに割り当てられているのに対し、コンテンツのみが必要であることを意味します。

ERROR in /raid/projects/pulse/angular-components/src/lib/card/card.ts (143,12): Argument of type '{ moduleId: string; selector: string; template: typeof '*.html'; encapsulation: ViewEncapsulation...' is not assignable to parameter of type 'Component'. 

(活字体2.3.3を使用して書いている時点で、)修正import文は次のとおりです:コンパイラエラーはこのようになります

import template from "template.html"; 

@Component({ 
    selector: 'home', 
    directives: [RouterLink], 
    template: template 
}) 
関連する問題