Angularjs (e.g. angular 1) had this convenient behaviour of searching for a element which had the id of the given templ
I think a cleaner way for this would be if you provide your custom ViewResolver
, inspired by the angular beta 17's source code, something in the lines of:
import { Type, ViewMetadata, Reflector, Injectable, ComponentMetadata } from 'angular2/core';
import { ViewResolver } from 'angular2/compiler';
const SCRIPT_TYPE_NAME = 'text/ng2-template';
@Injectable()
export class CustomViewResolver extends ViewResolver
{
constructor(private _r: Reflector){ super() }
resolve(component: Type): ViewMetadata
{
let annotations = this._r.annotations(component);
annotations.forEach( cm =>
{
if(cm instanceof ComponentMetadata && cm.templateUrl && typeof cm.templateUrl == 'string' )
{
let elemTpl = (document).getElementById(cm.templateUrl);
if( elemTpl && elemTpl.getAttribute('type') == SCRIPT_TYPE_NAME )
{
cm.template = elemTpl.innerHTML;
elemTpl.remove();
cm.templateUrl = undefined
}
else
throw new Error(`template "${cm.templateUrl}" not found among html scripts`)
}
})
return super.resolve(component)
}
}
Plunker Link