[解決済み] Angular 2の$compileに相当するもの
2022-05-24 04:27:55
質問
ディレクティブを含む HTML を手動でコンパイルしたいです。 に相当するものは何ですか?
$compile
に相当するものは何ですか?
例えば、Angular 1では、HTMLの断片を動的にコンパイルして、DOMに追加することができました。
var e = angular.element('<div directive></div>');
element.append(e);
$compile(e)($scope);
どのように解決するのですか?
角型 2.3.0 (2016-12-07)
すべての詳細を取得するには、確認してください。
実際に見るには
- 見る 動作中のプランカー (2.3.0+ で動作している)
プリンシパルです。
1) テンプレートの作成
2) コンポーネントの作成
3)モジュールの作成
4)モジュールのコンパイル
5) ComponentFactoryの作成(およびキャッシュ)
6) Targetを使用してInstanceを作成します。
Componentの作成方法について簡単に説明します。
createNewComponent (tmpl:string) {
@Component({
selector: 'dynamic-component',
template: tmpl,
})
class CustomDynamicComponent implements IHaveDynamicData {
@Input() public entity: any;
};
// a component for this particular template
return CustomDynamicComponent;
}
NgModuleにコンポーネントを注入する方法
createComponentModule (componentType: any) {
@NgModule({
imports: [
PartsModule, // there are 'text-editor', 'string-editor'...
],
declarations: [
componentType
],
})
class RuntimeComponentModule
{
}
// a module for just this Type
return RuntimeComponentModule;
}
の作成方法のコードスニペットです。
ComponentFactory
を作成する方法 (そしてそれをキャッシュする)
public createComponentFactory(template: string)
: Promise<ComponentFactory<IHaveDynamicData>> {
let factory = this._cacheOfFactories[template];
if (factory) {
console.log("Module and Type are returned from cache")
return new Promise((resolve) => {
resolve(factory);
});
}
// unknown template ... let's create a Type for it
let type = this.createNewComponent(template);
let module = this.createComponentModule(type);
return new Promise((resolve) => {
this.compiler
.compileModuleAndAllComponentsAsync(module)
.then((moduleWithFactories) =>
{
factory = _.find(moduleWithFactories.componentFactories
, { componentType: type });
this._cacheOfFactories[template] = factory;
resolve(factory);
});
});
}
上記の結果を利用するためのコード・スニペット
// here we get Factory (just compiled or from cache)
this.typeBuilder
.createComponentFactory(template)
.then((factory: ComponentFactory<IHaveDynamicData>) =>
{
// Target will instantiate and inject component (we'll keep reference to it)
this.componentRef = this
.dynamicComponentTarget
.createComponent(factory);
// let's inject @Inputs to component instance
let component = this.componentRef.instance;
component.entity = this.entity;
//...
});
すべての詳細が記述された完全な説明文 ここを読む または観察する 動作例
.
.
OBSOLETE - Angular 2.0 RC5関連 (RC5のみ)
以前の RC バージョンに対する以前の解決策を参照するには、以下を検索してください。 この投稿の履歴
関連
-
[解決済み] ionic 5 - ngForがデータを表示しない
-
[解決済み] Angular HTMLバインディング
-
[解決済み] Angular 2+でngShowとngHideに相当するものは何ですか?
-
[解決済み] ngIf」は「div」の既知のプロパティではないため、バインドできない [重複] 。
-
[解決済み】Angularのグローバルイベント
-
[解決済み】AngularJSの$watchに相当するAngularは何ですか?
-
[解決済み】Angular 6でサービスを生成する際に、InjectableデコレータでprovidedInの目的は何ですか?
-
[解決済み] Angular 2.0で動的コンポーネントをコンパイルするために動的テンプレートを使用/作成するにはどうすればよいですか?
-
[解決済み] Angular2の括弧、括弧、アスタリスクの違いは何ですか?
-
[解決済み] NgModule.schemasにCUSTOM_ELEMENTS_SCHEMAを追加してもエラーが表示される。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angularのエラーです。"Can't bind to 'ngModel' because it isn't a known property of 'input'"."
-
[解決済み] SubjectとBehaviorSubjectの違いは何ですか?
-
[解決済み】ユーザークリックで選択されたコンポーネントを含むダイナミックタブ
-
[解決済み] Angular 2.0で動的コンポーネントをコンパイルするために動的テンプレートを使用/作成するにはどうすればよいですか?
-
[解決済み】Angular 2 - innerHTML スタイリング
-
[解決済み】take(1) vs first()
-
[解決済み] Angularアプリケーションが本番モードと開発モードのどちらで動作しているかを確認する方法
-
[解決済み] AngularのHttpClientでエラーをキャッチする
-
[解決済み] angular-cli server - デフォルトのポートを指定する方法
-
[解決済み] Angular 2のテンプレートでlet-*とは何ですか?