2017-10-18 5 views
0

Nous utilisons angulaire pour construire une belle face avant pour notre application principale. Nous avons plusieurs clients qui demandent une personnalisation très mineure de ces composants de base. Je souhaite conserver notre code de base dans les packages NPM, puis apporter ces légères modifications en étendant les composants dans chaque application cliente. Pour ce faire, j'ai besoin d'étendre un composant enfant, mais garder le même sélecteur (sinon je dois modifier chaque composant parent).Extension d'un composant avec le même sélecteur - Angulaire 2/Angulaire-CLI

J'ai été capable de le faire avec aot = false builds en important le composant d'origine dans le composant d'extension et en utilisant un lien relatif vers node_modules pour templateUrl. Ensuite, je déclare le composant d'extension dans le fichier app.module et dépose le composant d'origine dans le fichier app.module (donc les sélecteurs ne sont pas en conflit).

Cela fonctionne très bien tant que aot = false, mais avec aot vrai, j'obtiens une erreur "ERREUR dans Impossible de déterminer le module pour la classe" pour le composant d'origine lors de la construction.

Existe-t-il un moyen d'étendre un composant d'un autre, de garder le même sélecteur et de bénéficier de la compilation AOT?

+1

Vous pouvez utiliser des classes de base sans les annotations '@Component()' et les ajouter uniquement aux implémentations concrètes. –

Répondre

0

Vous n'êtes pas sûr de pouvoir atteindre votre objectif sans changer de stratégie (consultez selector-conflicts).

Personnellement, j'essayerais d'utiliser le mécanisme dynamic component loader combiné avec une classe de client (Injection Beyond Classes) qui vous donne la bonne implémentation de votre composant: si vous en avez un, vous le chargez; sinon celui par défaut.

Bien sûr, les composants auront des sélecteurs différents.