2016-03-26 11 views
8

Come importare un modello HTML da un percorso relativo come questo:Come importare .html frammento utilizzando la sintassi ES6 a macchina

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

dattiloscritto compilatore si lamenta che non riesce a trovare il modulo. Stavo cercando di creare una definizione di modulo ambientale, ma non consente percorsi relativi nei nomi dei moduli. Sto usando SystemJS come caricatore di moduli.

risposta

2

È impossibile.

A causa della definizione di ciò che è module in dattiloscritto, e per quanto ne so in ES6 javascript (import). Il modulo non può essere html. L'approccio comune è quello di importare un modulo javascript che esporta una stringa contenente html, css, qualunque sia. Ma non è importare il file con html raw.

Forse vuoi dare un'occhiata anche allo html imports, ma questa è una cosa completamente diversa.

+0

Sì, le importazioni sono una cosa completamente diversa e non supportata. E i workaround sono brutti. Mentre è effettivamente possibile con percorsi non relativi: http://stackoverflow.com/questions/30962590/typescriptsystemjs-using-json-and-text-plugins – rgripper

+0

È più un hack che un modo reale di farlo. Usando l'approccio ho fatto riferimento al dattiloscritto "idiota" nel pensare all'html come javascript valido. Fino ad ora consiglierei di adottare metodi "tradizionali" per caricare in modo dinamico il contenuto dei file. Ma in ogni caso - grazie per il link, è utile. – Amid

+0

Sì, dopo un po 'di riflessione sono d'accordo e considero l'utilizzo della sintassi di importazione per il caricamento di frammenti html un errore e il caricamento tradizionale è il modo giusto. – rgripper

0

Non so su SystemJS, ma questo è sicuramente possibile con Webpack e la html-loader

1

è possibile importare utilizzando la sintassi necessaria

1) Creare app.d.ts di file e richiedono la definizione così dattiloscritto sanno che questa è la funzione. (Si usi t bisogno di aggiungere qualsiasi libreria Inoltre, il supporto systemJs richiedono sintassi)

declare function require(params:string): any; 

2) ora è possibile importare la vostra HTML usando modello var = require ('! ./ misura select.html testo')

ho trovato ancora meglio, perché è possibile utilizzare richiede linea

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

Lo so, ma questo non è una sintassi ES6 e più prolisso. – rgripper

+0

Ciò richiede systemJs/Webpack o funziona con il compilatore dattiloscritto stesso? – faizan

+0

Ciò richiede SystemJs Text plug –

4

non sto usando dattiloscritto, ma lo faccio usare ES6. Potrebbe essere utile per te.

Il modo in cui risolvo questo è dichiarando stringhe di template usando "virgolette". Funziona bene per me, sarei felice di sapere se qualcuno pensa che questa sia una cattiva abitudine.

sotto uno snippet con Angolare (-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 
    }) 
} 

Per completezza, questo assume IndexController è definito altrove. Inoltre, questa funzione di configurazione viene esportata in un luogo in cui è definita l'app. Ma tutto ciò non è correlato alla domanda.