Detailed explanation of the implementation of shared modules in Angular projects

Detailed explanation of the implementation of shared modules in Angular projects

1. Shared CommonModule

Create a share model: ng gm share

All modules that need to be shared are exported after importing.

For now, there is only CommonModule, and there will be some components that need to be shared in the future.

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

@NgModule({
  imports: [
    CommonModule
  ],
  exports:
    CommonModule
  ],
  declarations: []
})
export class SharedModule { }

Import the core Module into the app Module.

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

import { AppComponent } from './app.component';
import {CoreModule} from './core/core.module';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    CoreModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

2. Shared MaterialModule

For easy management, put the import and export of Material-related components in a separate Moduel, and import and export them in ShareModule.

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MatToolbarModule, MatSidenavModule, MatButtonModule, MatCardModule, MatInputModule, MatListModule, MatSlideToggleModule, MatGridListModule, MatDialogModule, MatAutocompleteModule, MatMenuModule, MatCheckboxModule, MatTooltipModule, MatDatepickerModule, MatRadioModule, MatNativeDateModule, MatSelectModule } from '@angular/material';
import { MatIconModule } from '@angular/material';

const module=[
  MatSidenavModule,
  MatIconModule,
  MatToolbarModule,
  MatIconModule,
  MatButtonModule,
  MatCardModule,
  MatInputModule,
  MatListModule,
  MatSlideToggleModule,
  MatGridListModule,
  MatDialogModule,
  MatAutocompleteModule,
  MatMenuModule,
  MatCheckboxModule,
  MatTooltipModule,
  MatDatepickerModule,
  MatRadioModule,
  MatNativeDateModule,
  MatSelectModule
];

@NgModule({
  declarations: [],
  imports: [
    module
  ],
  exports:
    module
  ]
})
export class MaterialModule { }
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MaterialModule } from '../material/material.module';
import { ConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component';

@NgModule({
  imports: [
    CommonModule,
    MaterialModule
  ],
  exports:
    CommonModule,
    MaterialModule
  ],
  declarations: [ConfirmDialogComponent]
})
export class SharedModule { }

3. Shared ConfirmDialog

The confirmation dialog box is used whether you are deleting a task or a project, so it is placed in the sharedModule.

$ ng gc shared/confirm-dialog

You can also create an inline template and style using ng gc shared/confirm-dialog -it -is

<form>
  <h2 md-dialog-title>{{title}}</h2>
  <div mat-dialog-content>
    {{content}}
  </div>
  <div mat-dialog-actions>
    <button type="button" mat-raised-button color="primary" (click)="onClick(true)">OK</button>
    <button type="button" mat-button mat-dialog-close (click)="onClick(false)">Cancel</button>
  </div>
</form>
import { Component, OnInit, Inject } from "@angular/core";
import { MatDialogRef } from "@angular/material";
import { MAT_DIALOG_DATA } from "@angular/material";

@Component({
  selector: "app-confirm-dialog",
  templateUrl: "./confirm-dialog.component.html",
  styleUrls: ["./confirm-dialog.component.scss"]
})
export class ConfirmDialogComponent implements OnInit {
  title = "";
  content = "";
  constructor(
    private dialogRef: MatDialogRef<ConfirmDialogComponent>,
    @Inject(MAT_DIALOG_DATA) private data
  ) { }

  ngOnInit() {
    this.title = this.data.title;
    this.content = this.data.content;
  }
  onClick(result: boolean) {
    this.dialogRef.close(result);
  }
}

Then put the ConfirmDialogComponent component in sharedModule.

import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import { MaterialModule } from "../material/material.module";
import { ConfirmDialogComponent } from "./confirm-dialog/confirm-dialog.component";

@NgModule({
  imports: [CommonModule, MaterialModule],
  exports: [CommonModule, MaterialModule],
  declarations: [ConfirmDialogComponent],
  entryComponents: [ConfirmDialogComponent]
})
export class SharedModule { }

If you use ConfirmDialog, refer to Deleting a Project.

The above is a detailed explanation of the implementation of shared modules in Angular projects. For more information about Angular, please pay attention to other related articles on 123WORDPRESS.COM!

You may also be interested in:
  • Detailed explanation of angular2 modules and shared modules
  • Detailed explanation of Angular structural directive modules and styles
  • Angular multi-module project build process
  • Specific usage of angular2 NgModel module
  • Example of Angular implementing preloading of delayed modules
  • Detailed explanation of lazy loading Angular modules using routing
  • A brief discussion on the lazy loading method of Angular2 modules

<<:  Summary of Nginx load balancing methods

>>:  Oracle deployment tutorial in Linux environment

Recommend

Summary of MySQL character sets

Table of contents Character Set Comparison Rules ...

mysql group_concat method example to write group fields into one row

This article uses an example to describe how to u...

Docker container time zone adjustment operation

How to check if the Docker container time zone is...

Detailed tutorial on installing Docker and nvidia-docker on Ubuntu 16.04

Table of contents Docker Installation Nvidia-dock...

Discussion on CSS style priority and cascading order

In general : [1 important flag] > [4 special fl...

vue-router hook function implements routing guard

Table of contents Overview Global hook function R...

The perfect solution to the Chinese garbled characters in mysql6.x under win7

1. Stop the MySQL service in the command line: ne...

Nginx reverse proxy learning example tutorial

Table of contents 1. Reverse proxy preparation 1....

The difference between div and table in speed, loading, web application, etc.

1: Differences in speed and loading methods The di...

Analysis of Vue element background authentication process

Preface: Recently, I encountered a management sys...

MySQL recursion problem

MySQL itself does not support recursive syntax, b...

Vue3.0 implements encapsulation of checkbox components

This article example shares the specific code of ...

Solutions to black screen when installing Ubuntu (3 types)

My computer graphics card is Nvidia graphics card...