1
votes

Comment inclure un modèle de composant dans un autre?

J'utilise l'application ionic 5.0.0 et j'ai une page de discussion et une page d'accueil dedans. Je souhaite inclure la page de discussion dans la page d'accueil. équivalent à ng-include .

J'ai ajouté le exports[ dans mon chat.module.ts comme indiqué ci-dessous

import { Component, OnInit, OnDestroy } from '@angular/core';
import { HttpProvider } from '../../providers/http/http';
import { GlobalFunctions } from '../../providers/global-functions';
import { Router, NavigationEnd } from '@angular/router';
import { MenuController } from '@ionic/angular';
import { ScreenOrientation } from '@ionic-native/screen-orientation/ngx';
import * as _ from 'underscore';
import { NgxUiLoaderService } from 'ngx-ui-loader';
import { Platform } from '@ionic/angular';


@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage implements OnInit, OnDestroy {
...
}

Ensuite, j'ai importé le module de chat dans mon app.module.ts strong> comme suit

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-chat',
  templateUrl: './chat.page.html',
  styleUrls: ['./chat.page.scss'],
})
export class ChatPage implements OnInit {

  constructor() { }

  ngOnInit() {
  }

}

Ensuite, j'ai ajouté le sélecteur de composant de chat dans ma home.page.html comme suit.

<ion-header>
    <ion-toolbar>
        <ion-title text-center>HOME</ion-title>                
    </ion-toolbar>
</ion-header>

<ion-content  class="homepage-content no-scroll" >
<ion-row>
...
</ion-row>

<ion-row>
 ...
 </ion-row>

<ion-row>  
<app-chat></app-chat> <!-- Here it is -->
</ion-row>

</ion-content>

Mais lorsque j'exécute mon application, j'obtiens une erreur ci-dessous dans la console.

 entrez la description de l'image ici

Voici mon chat.page.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';

import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { PopoverPageModule } from './popover/popover.module';
import { HttpClientModule } from '@angular/common/http';
import { GlobalFunctions } from '../providers/global-functions';
import { AuthGuard } from '../providers/security/auth-guard';
import { HTTP } from '@ionic-native/http/ngx';
import { HttpProvider } from '../providers/http/http';
import { HttpAngularProvider } from '../providers/http/http-angular';
import { HttpNativeProvider } from '../providers/http/http-native';
import { ScreenOrientation } from '@ionic-native/screen-orientation/ngx';
import { NgxUiLoaderModule } from  'ngx-ui-loader';
import { IonicGestureConfig } from '../providers/IonicGestureConfig';
import { HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';
import { ChatPageModule } from './chat/chat.module';

@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [
    BrowserModule, 
    HttpClientModule, 
    IonicModule.forRoot(), 
    AppRoutingModule, 
    PopoverPageModule,
    NgxUiLoaderModule,
    ChatPageModule // --> Here it is
  ],
  providers: [
    HttpProvider,
    HttpAngularProvider,
    HttpNativeProvider,
    GlobalFunctions,
    AuthGuard,
    StatusBar,
    ScreenOrientation,
    SplashScreen,
    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
    { provide: HAMMER_GESTURE_CONFIG,useClass: IonicGestureConfig
  },
    HTTP
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

Voici ma page d'accueil. ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';

import { IonicModule } from '@ionic/angular';

import { ChatPage } from './chat.page';

const routes: Routes = [
  {
    path: '',
    component: ChatPage
  }
];

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    IonicModule,
    RouterModule.forChild(routes)
  ],
  exports: [ChatPage], // --> Here it is
  declarations: [ChatPage]
})
export class ChatPageModule {}

Voir la structure de mon code du module de discussion et du module d'accueil. Les deux sont des modules différents.

 entrez la description de l'image ici

 entrez la description de l'image ici

p >


13 commentaires

Montrez l'erreur.


@Adrita Sharma Erreur ajoutée


home.page.html est un composant non? et une partie de quel module? Je ne le vois pas dans app.module


Hii Abhilash .. !! assurez-vous que vous utilisez le sélecteur correct pour ce , est-ce la même chose dans le fichier Chat.module.ts?


Salut HaSnen Tai, j'ai ajouté le fichier chat.page.ts


Afficher le composant de la page d'accueil


S'il vous plaît, affichez les premières lignes de chat-page.component.ts


Ce serait bien si vous pouviez montrer une démo en ligne en violon


Salut Daniel, j'ai déjà ajouté un composant de page de chat.


Salut Adrita Sharma Donc, vous dites que je dois importer le module d'accueil également dans app.module.ts?


Je dis que HomePage est un composant et doit faire partie d'un module. Quel module?


Est-il possible que vous ayez un loginPageModule et que home.page.html fasse partie de ce module?


Dans tous les cas, vous avez écrit dans un html de votre LoginPageModule et votre erreur est précisément que vous n'avez pas importé le < code> Module ChatPage dans LoginPageModule .


5 Réponses :


0
votes

Je sais que vous avez deux modules différents et que vous souhaitez les utiliser dans un module différent. Voici un exemple de la façon dont le composant Hello est partagé par le composant d'application. L'exemple de travail ici.

Ceci est fait dans le même module. Si vous voulez, vous pouvez suivre la même chose.

https://stackblitz.com/edit/angular-8-viewchild -exemple-cazvny


3 commentaires

Cela fonctionne bien lorsque j'ajoute un composant de chat en tant que déclaration dans le module d'accueil. Mais je ne peux pas déclarer le composant de chat dans aucun autre module. Puisqu'il affiche "déplacez la déclaration vers un autre module qui importe à la fois les modules de discussion et d'accueil".


@AbhilashShajan La déclaration d'un seul composant doit être dans le module parent, pour utiliser un composant dans différents modules, il faut créer ce qu'on appelle un module partagé, ce module partagé serait celui qui déclare le composant et aussi l'exporter , afin que tout module de votre application souhaitant l'utiliser, puisse importer le module partagé.


Oui Daniel j'ai importé le module de chat dans mon module d'accueil comme tu l'as dit. Je peux maintenant voir le modèle de chat dans mon modèle d'accueil. Mais le problème est que le modèle de page d'accueil a disparu. le modèle de chat vient de remplacer le modèle d'accueil. Comment voir les deux?



1
votes

Puisque le composant HomePage n'est pas déclaré dans app.module ,

Vous devez importer ChatPageModule dans le module où HomePage composant est déclaré.


0 commentaires

0
votes

Est-il possible que vous ayez un loginPageModule et que home.page.html fasse partie de ce module?

Vous n'avez pas besoin d'importer ChatPageModule dans AppModule , vous devez importer ChatPageModule dans LoginPageModule .


Dans tous les cas, vous avez écrit dans du html de votre LoginPageModule et votre erreur est précisément que vous ne l'avez pas a importé le module ChatPage dans LoginPageModule .


0 commentaires

0
votes

Je n'ai jamais entendu parler d'inclusion d'une page elle-même dans une autre page.

Ce que je m'attendrais à voir, c'est que vous génériez un composant avec la ligne de commande comme:

ionic generate component components/chat

Ensuite, vous obtiendriez un groupe de chat.component. ts (scss, html, etc.).

Refactorisez tout ce qui se trouve dans app-chat dans le composant.

Ensuite, vous besoin de créer votre propre module partagé pour pouvoir le réutiliser sur plusieurs pages:


0 commentaires

0
votes

Une page ne peut pas être utilisée dans une autre page. Pour cela, ionic a des composants qui forment une petite partie de tout l'écran / page.

Cela peut être fait de la manière suivante:

Au lieu de la page de discussion, créez un composant de discussion et utilisez-le ensuite dans vos pages / components où vous voulez.

Utilisez le sélecteur de votre composant de chat dans votre composant / page parent.

Dans le fichier ts du composant enfant:

<app-chat-component></app-chat-component> 


0 commentaires