J'ai créé un projet en utilisant angular-cli
qui contient AppComponent comme suit :
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app works!';
}
Et app.component.html como
<h1>
Good Morning, {{title}}
</h1>
Donc quand je le construis avec ng build
il génère des fichiers comme celui-ci ./dist/main.bundle.js qui contient du code comme suit .
/* 586 */
/***/ function(module, exports) {
module.exports = "<h1>\n Good Morning, {{title}}\n</h1>\n"
/***/ },
/* 587 */
Cela signifie qu'au moment de la construction, le compilateur/l'éditeur de bundle lit le fichier html et le concatène dans le fichier js généré.
Mais dans mon cas, le html est aussi dynamique et axé sur le contenu du côté serveur. Disons qu'au lieu de html, mon fichier modèle est app.component.jsp et résidant sur un serveur ou un dossier complètement différent.
De plus, ce fichier JSP renvoie parfois <h1>Good Morning, {{title}}</h1>
et parfois <h1>Good Afternoon, {{title}}</h1>
en fonction de l'heure actuelle du serveur.
Comment réaliser cette fonctionnalité ?
Ce que je comprends, c'est que je dois définir une sorte de fonction de chargement, par exemple : loadDynamicTemplate(template_url)
et j'ai besoin d'utiliser cette fonction de chargement sur la propriété du modèle de décorateur de composant. Dans ce cas, lorsque le fichier main.bundle.JS est généré, il utilise également cette fonction. Ainsi, lors de l'exécution, Angular appellera cette fonction, chargera le HTML par ajax et l'utilisera.
Mise à jour 1
Ici J'ai trouvé quelques différences entre SystemJS et Webpack. J'ai également découvert que nous pouvons charger les fichiers HTML en cours d'exécution si nous utilisons SystemJS. Je pense donc que ce problème peut être résolu avec la configuration de SystemJS. Mais pour cela, un autre problème entre en jeu, bien que je pense que cela pourrait être une question distincte. J'ai donc posté une nouvelle question pour faire le tri. ici .
Si cette question est résolue, j'essaierai probablement avec SystemJS et je posterai la solution ici si elle est utile.
0 votes
Ce n'est pas très courant dans Angular2. Voir stackoverflow.com/questions/34784778/
1 votes
Dans mon cas, tous mes composants auront le même comportement. Et il est vraiment problématique de définir tous mes composants comme dynamiques. Donc, en fait, je suis à la recherche de ce genre de choses.
template: "<my-template url='./app.component.html'></my-template>"
. Icimy-template
pourrait être une directive et il chargera le HTML dynamiquement. En outre, toutes les autres fonctionnalités devraient rester intactes. Il devrait fonctionner de la même manière quetemplateUrl: './app.component.html'
0 votes
Je comprends que ce n'est pas très courant. En fait, j'ai un système de gestion de contenu côté serveur avec Adobe AEM. Je veux l'utiliser pour sa grande fonctionnalité de création. Angular2 étant un excellent framework, je suis sûr qu'il doit y avoir un moyen de le contourner. (Sans changer tant de code, je veux juste servir les modèles à l'exécution via un appel AJAX uniquement). Merci de m'aider.
0 votes
Vous pouvez charger du HTML dans les composants existants, mais uniquement du HTML simple. S'il doit devenir des composants Angular, des directives ou des liaisons de données ou d'événements, il doit être dans le modèle d'un composant compilé.
0 votes
@ParthaSarathiGhosh, avez-vous essayé la bibliothèque ng-dynamic ? Je pense qu'elle fait vraiment l'affaire : github.com/laco0416/ng-dynamic
0 votes
Oui, je pense que ça pourrait marcher. Pouvez-vous répondre à cette question ? Pour que je puisse sélectionner la réponse si j'ai réussi.
0 votes
Avez-vous jamais résolu ce problème d'AEM et d'angle 2 (ou 4) ?