2016-03-26 15 views
8

Jak zaimportować szablon HTML z ścieżkę względną tak:Jak importować .html fragment używając składni ES6 w maszynopisie

import customSelectHtml from "./custom-select.html!text"; 

maszynopis kompilator narzeka, że ​​nie może znaleźć modułu. Próbowałem utworzyć definicję modułu otoczenia, ale nie pozwala to na względne ścieżki w nazwach modułów. Używam SystemJS jako program ładujący moduły.

Odpowiedz

2

To niemożliwe.

Ze względu na definicję, co jest module w pismach maszynowych, i o ile wiem w ES6 javascript (import). Moduł nie może być html. Powszechnym podejściem jest zaimportowanie modułu javascript, który eksportuje ciąg znaków zawierający html, css, cokolwiek. Ale to nie jest import pliku z surowym html.

Być może chcesz również rzucić okiem na html imports, ale to zupełnie inna sprawa.

+0

Tak, import jest zupełnie inną i nieobsługiwaną rzeczą. A obejścia są brzydkie. Chociaż jest to możliwe z nie-względnymi ścieżkami: http://stackoverflow.com/questions/30962590/typescriptsystemjs-using-json-and-text-plugins – rgripper

+0

To bardziej hack niż rzeczywisty sposób robienia tego. Używając podejścia, odesłałem to "maszynowy głupiec" do myślenia o html jako prawidłowym javascript. Do tej pory polecam używanie "tradycyjnych" sposobów dynamicznego ładowania zawartości plików. Ale w każdym razie - dzięki za link, jest to przydatne. – Amid

+0

Tak, po odrobinie myślenia zgadzam się i rozważam użycie składni importu do ładowania fragmentów html, a błąd i tradycyjne ładowanie jest właściwą drogą. – rgripper

1

Można je importować za pomocą wymagają składnię

1) Utwórz app.d.ts plik i tak wymagają definicji maszynopis wie, że to jest funkcja. (Don; t trzeba dodać dowolną bibliotekę Ponadto wsparcie systemJs wymagają składnia)

declare function require(params:string): any; 

2) Teraz można zaimportować HTML za pomocą szablonu var = require ('! ./ zamówienie select.html tekst')

znalazłem to nawet lepiej, ponieważ można używać wymagają inline

var directive = { 
    template: require('./custom-select.html!text'), 
    scope: {} 
} 
+0

Wiem, ale to nie jest składnia ES6 i bardziej szczegółowe. – rgripper

+0

Czy to wymaga systemJs/Webpack lub działa z samym kompilatorem? – faizan

+0

To wymaga wtyczki SystemJs Text –

4

nie używam maszynopis, ale mam użyć ES6. Może ci się przydać.

Sposób rozwiązania tego problemu polega na zadeklarowaniu ciągów szablonów za pomocą "cudzysłowów". Działa to dobrze dla mnie, byłbym szczęśliwy wiedząc, czy ktoś myśli, że to zły nawyk.

Poniżej fragment z Angular (-ui-router).

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 
    }) 
} 

Dla kompletności, to zakłada IndexController zdefiniowane w innym miejscu. Ponadto ta funkcja konfiguracyjna jest eksportowana do miejsca, w którym zdefiniowana jest aplikacja. Ale to wszystko nie jest związane z pytaniem.

Powiązane problemy