Never stop learning, approaching the AI
  • 😄About
  • 🅰️AI-Candy on YouTube
    • 🎬YouTube 视频列表
    • 💠AI项目本地部署
      • 1️⃣安装 Pytorch 运行环境
      • 2️⃣在Python虚拟环境下使用 VS Code or PyCharm
        • VS Code Python format
      • 3️⃣Create python virtual environment in Linux
    • 👽AI 入门系列课程
      • 0️向量及向量运算
        • Reshape array code
      • 1️人工智能,机器学习,深度学习 和神经网络的区别
      • 2️卷积神经网络(CNN)
        • 3D CNN sample code
      • 3️Transformer 原理
      • 4️前馈神经网络 (FNN)
  • 🎭Artificial intelligence
    • 1️⃣Deep learning / machine learning
      • 👉Deep Learning Resources
      • 👉Deep learning notes
    • 2️⃣Python
      • Youtube音乐下载
      • Pytorch 安装环境配置 (old)
        • TorchEEG
      • Anaconda3 Python path
      • Data
      • IEEE-754 Floating Point Converter
        • ieee 754 conversion function
      • 文件读写
      • 文本清理
      • Python 下载在线视频
      • 修改Jupyter Notebook 默认工作目录
    • 3️⃣AI Websites
  • 🪤Programming
    • SQL
      • Delete data and reset auto-increment ID
    • Angular
      • Angular-datatables, dd/MM/yyyy, sorting (no paged list)
      • Datatables save state using localStorage
      • Variable storage method
      • Colour picker
      • Error fix for click columns on Datatable
      • Auto address use Google place
      • Auto address use Azure Maps
      • Upload file to Server
      • Validators.required OnChange input
      • Date, Time field
      • VS Code: Auto add missing imports when save
      • Datatable setting
      • Date time format
      • sticky <th> and <td> content
      • Filter booked time
      • Dropdown time selection with interval
      • Angular date online test
      • Updating data without refreshing the page
      • Object array sort and sum
      • Multi-type of columns use in one column
      • Select button for datatables
      • Switch button and event
      • Delete column from Array
      • Three-layer structure
      • Remove shadow when print mat-dialog content
      • JSON Parse && Object Array
      • Detect unused import in Typescript
      • Change location using radio button
      • display multi line message in the Toastr
      • Custom LOCALE_ID
      • Batch add data from csv to API server
        • Angular read csv and upload to Server
      • USB Port reader Web solution
      • Debug Angular app using JavaScript Debugger in VS Code
      • Skills
        • FormData & FormGroup to JSON
        • Dropdown list (customer)
        • Get current datetime
        • Get first day of year, month, and date
        • Call a function in a forEach loop
        • disable and readonly
        • Form element value
        • HTML input type
        • Input pattern (validation)
      • Display pipe (UI format)
        • Input upper case and button checked
        • Icons (Bootstrap and CoreUI)
        • Page Refresh
        • Selection list (two ways)
        • onChange Selection event
        • Random Password and Toggle
        • Password match
        • Select checkbox disable
      • Print and save to PDF
      • Import JS into Angular
      • LocalStorage
      • Angular DataTable
        • Data sort
        • A sample usage
        • Angular DataTable server side big data query
      • Change chart.js chart type
      • Angular UI - .NET API - .NET Auth
      • Angular - .NET API
      • *ngIf else && change to @if
      • Angular add reCAPTCHA v3 (Google)
      • Angular update
        • Update from v13 to v15
        • Update from v15 to v18
      • Angular application version central
      • Face detection
        • Face-api.js
      • Angular, Node version compatibility matrix
      • Clear cache
      • Angular oauth2 OIDC
      • Angular add header
    • .NET Skills
      • Add ID manually
      • Auto Mapping
        • Ignore Nesting
        • Startup setting
        • Datetime processing in AutoMapping
        • AutoMapper example
      • Validation filter
      • BaseController
      • Group by many
      • Database first, scaffold to class
      • Log setting and exception handler
      • Update appsetting.json value
      • Azure service bus message (queue)
      • Read appsetting.json value
      • Auth get user info by email
      • Azure Time zone
      • .NET API Add Service
      • Object comparison
      • Coravel Schedule
        • Read appsettings.json
      • .Net Core RDLC Report, Coravel and Email
      • Check Network and SQL server connections.
      • Datatime custom format
      • Many to Many EF
        • Many to Many CheckBox
      • PDFpig: Send Email with PDF attachment
      • .NET Core Middleware order
      • .NET API add Worker Service
      • .NET Router
      • Partial columns update
      • Add and Delete
      • 图片自适应宽度
      • ASP.NET Identity
      • Upload file to Azure
        • Upload file to Blob
      • Developer Guide
      • Code first one-many
      • ASP.NET MVC 5 Custom Error Page
      • VS can't debug
      • 通过邮编查 NSW COVID-19 感染人数
      • Jquery File Upload
      • Jquery Datepicker
      • ajax delete file from server
      • Autofac in MVC
      • Autofac in .NET Core
      • .NET Core
      • HTTP Return code
      • IdentityServer4
    • Power BI
      • Add parameter to PowerBI report
      • Convert UTC to Local time
      • Python in PowerBI
        • IEEE-754 conversion
      • PowerBI embed app - Server
      • PowerBI embed app - Client
        • Setting on portal
    • Azure service
      • Key Vault
      • Service bus - queue
      • Power Automate
      • Kusto Query Language
      • Azure Data Explorer
      • Reserved keyword on Azure Error
      • SQL Azure time convert
    • Azure blob
      • Azure blob setting
      • Display image from Blob
      • Upload image to Blob through .NET API
    • Html Bootstrap Icon, colour, size
      • Html spacing
      • Html text alignment
    • Video stream - JsMpeg
      • SSL - generate key
      • Client (SSL)
      • Websocket-Server (SSL)
      • Play RTSP video stream
    • ⏰Time Zone
      • datetime-local set date range
      • 🕐Get data by local time (UI, API)
      • 🕑Add offset hours for local UI and report
      • 🕒UTC time and Datetime convert
      • 🕓Angular - Timezone selection
      • 🕔Angular - Convert UTC to local time
      • 🕕C# Time Zone
  • >>>>>>>>>>>>>>>>>>>>>>>>>>>>
  • 🪜Apps and Skills
    • 1️Windows system app skills
      • Brother HL-2130 打印机 Toner 报警
      • VS Code 快捷键
      • Check SHA256 on windows
      • blob 视频下载
      • Photoshop 制作证件照片
      • 获取 Windows Key
      • 10进制36进制互转
      • Error when publish to Azure
      • Disable windows automatic update
      • Outlook setup for Yahoo Email
      • IIS setting
      • Windows 8/10, IIS Service
      • 安装程序出错 2052,2053 报警
      • 6 Yao Chinese UI
    • 2️Linux command
    • 3️Git command
    • 4️Bitbucket
    • 5️Gitbook Skills
    • 6️GitHub Desktop
    • 7️⃣EndNote
      • EndNote V21
      • Endnote使用技巧
      • 批量删除/修改Endnote 中 notes 栏内容
  • Android mobile connect PC
  • 💎USEFUL LINKS
    • 1️Coding websites
      • Website links
    • 2️Windows 平台工具,网站
    • 3️PotPlayer 设置
  • >>>>>>>>>>>>>>>>>>>>>>>>>>>>
  • 🚩Research >>EEG
    • 1️EEG基本知识的理论介绍
      • EEG 简介
      • EEG 的节律信号
      • EEG电极帽
      • EEG 伪迹
      • ERP 介绍
      • ERP 成分
      • EEG 数据分析软件
    • 2️LSL 应用
    • 3️EEG公开数据集汇总整理
    • 4️REDCap
      • Migration (Export & Import)
    • 5️⃣ScaneR
  • ☕Buy me a coffee
Powered by GitBook
On this page

Was this helpful?

  1. Programming
  2. Angular

Three-layer structure

.NET API + Auth + Angular

\WWWebApp -- .NET Core 5.0 Web API

Back-end / .NET Core API

  1. Add a model using Scaffold-Dbcontext (database first ET)

Open Package Manager Console:

Scaffold-DbContext "Server=.\SQLEXPRESS2019; User ID=sa; Password=mrpresident12; database=SquibWeb;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables Flexpoint.Customer, Flexpoint.Driver, Flexpoint.Product, Flexpoint.Product_Warehouse, Flexpoint.Warehouse, Flexpoint.RFID, Flexpoint.Contract, Flexpoint.VehicleType, Flexpoint.Vehicle, Flexpoint.Email, Flexpoint.PermitType, Flexpoint.Settings

Models\Customer -- Company Models\Driver Models\Product Models\Product_Warehouse -- Poduct_Warehouse Models\Warehouse Models\RFID Models\Contract Models\VehicleType Models\Vehicle

Models\Email Models\PermitType Models\Settings

Create model from table: Scaffold-DbContext "Server=.\SQLEXPRESS2019; User ID=sa; Password=mrpresident12; database=SquibWeb;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables Flexpoint.BARLEY_PRODUCT_INFO, Flexpoint.CANOLA_PRODUCT_INFO, Flexpoint.WHEAT_PRODUCT_INFO

class SquibWebContext: connect move to class WWWebContext.cs delete class SquibWebContext.cs

  1. Add Base Repository

    Web Server->Controller->Repository->Unit of Work(DbContext)->EF database

    Add: 1. Repository: BaseRepository and UnitOfWork 2. IRepository: IBaseRepository and IUnitOfWork

    Add SampleRepository first, then use refoctory (Ctrl .) to generate ISampleRepository

    public class SampleRepository : BaseRepository<Weighing>, ISampleRepository

    Add AutoMapProfile

     public class AutofacModule: Autofac.Module
     {
     	protected override void Load(ContainerBuilder builder)
     	{
     		var assembly = Assembly.Load("WWWebApp");
     		builder.RegisterAssemblyTypes(assembly)
     			.Where(x => x.Name.EndsWith("Repository") && !x.Name.StartsWith('I') || x.Name.Equals("UnitOfWork"))
     			.AsImplementedInterfaces().PropertiesAutowired();
     	}
     }	

    Startup.cs public IServiceProvider ConfigureServices(IServiceCollection services) { builder.RegisterModule(); builder.Populate(services); AutofacContainer = builder.Build(); }

  2. Add Controller

BarleyProductInfo, CanolaProductInfo, WheatProductInfo

New Scaffolded / API / API Controller with read/write actions Add IRepositories

    private readonly IUnitOfWork _unitOfWork;
    private readonly IDisplayWeightRepository _repository;
    private readonly IMapper _mapper;

    public DisplayWeightController(IUnitOfWork unitOfWork, IDisplayWeightRepository repository, IMapper mapper)
    {
        this._unitOfWork = unitOfWork;
        this._repository = repository;
        this._mapper = mapper;
    }
	

3. Add ViewModel

// Create sampleViewModel


 public class AutoMapProfile : Profile
 {
    //Model to ViewModel
    public AutoMapProfile()
    {
        CreateMap<sampleViewModel, sampleModel>();
        CreateMap<sampleModel, sampleViewModel>();
    }
 }

Startup.cs
    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
	    var mappingConfiguration = new MapperConfiguration(config => config.AddProfile(new AutoMapProfile()));
        IMapper mapper = mappingConfiguration.CreateMapper();
        services.AddSingleton(mapper);	
    }

4. add repository (interface and service)

a. Create DriverRepository.cs in \Repositories\Repository b. Ctrl . Generate a IDriverRepository public interface IDriverRepository : IBaseRepository { } c. move to \IRepository

  • Add mapping in \MapProfileFormapper\AutoMapProfile.cs

    CreateMap<DriverViewModel, Driver>().ReverseMap();

Front-end / Angular

  1. Add (Generate) Service and Model class

    ---- goto .\src\app ----

     ng g s services/[name]      --skip-tests         // add service
     
     
     ng g class models/[name]    --skip-tests         // add a model class
     
     example:
       ng g service auth-interceptor --skiptests     ////  AuthInterceptorService will be created
  2. Add component and module

    ---- goto .\src\app\components ----

     ng g module [name] --routing        // add a module with rounting.modules.ts
     
     ng g c [name]  	                    // add a component  (app.module.ts  check component has added)
    
     ng g c driver/driver-delete   --skip-tests     // skip generate the test file
     ng g c driver/driver-add-update
     ng g c driver/driver-info   (or under the folder driver: ng g c /driver-info)
  3. Add the Component name into [name].module.ts (app.module.ts, it need to delete component)

    import { MatDialogModule } from '@angular/material/dialog'; //if use it

    declarations: [WeighingComponent]

        imports: [MatDialogModule,]
  4. Add route in the [name]-routing.module.ts

    const routes: Routes = [ { path: '', component: WeighingComponent, data: { title: $localizeWeighing } } ];

  5. Add content in model class

    export class Weighing { Location!: number; Carrier!: string; }

  6. Add [name]Module in the \app\app-routing.module.ts

     path: 'customer',
     loadChildren: () =>
       import('./components/customer/customer.module').then((m) => m.CustomerModule)
    
     *** components has add in app.module.ts, it need to delete ****
     *** only need add [component]Component in one place
  7. Add url and method in the [name].service.ts

    url = 'http://localhost:5000/api/'; // url = 'https://localhost:5001/api/';

    constructor(private httpClient: HttpClient) { }

    getAllWeighings(): Observable<any[]> { var data = this.httpClient.get<Weighing[]>(this.url + 'displayweight'); // .pipe(map((res: Weighing[]) => res)); return data; }

  8. Add method in the [name].components.ts

    constructor(private weighingService: WeighingService) {

    }

    ngOnInit(): void { this.weighingService.getAllWeighings().subscribe((res:any) => { this.WeighingList = res; }, error => { console.log("retrive weighing list error"); }); }

  9. Add routing in app-routing.module.ts

    { path: 'weighing', loadChildren: () => import('./components/weighing/weighing.module').then((m) => m.WeighingModule) },

  10. add Modul in [name].module.ts if using MatDialog

    Can't bind to 'formGroup' since it isn't a known property of 'form'

    import { MatDialogModule } from '@angular/material/dialog';

    imports: [ MatDialogModule, ReactiveFormsModule, ]
  11. [name].service.ts

    import { environment } from 'src/environments/environment'; import { Inject, Injectable } from '@angular/core';

    rootURL = environment.backEndAPIEndpoint;

  12. add route in \containers_nav.ts

    children: [ { name: 'Customer', url: '/customer', },


  app-routing.module.ts    ---> point to 	 .\components\[name]\[name].module
   
  components\components.module.ts   (or app.modules.ts -- {opertion})   ??????
 
 .\models\
          -> [name].ts
		  
 .\services\
          -> [name].service.ts                   --> server url and get data from server using model

 .\components\[name]\
				  -> [name].module.ts            --> point to [name].component.ts
				  -> [name].component.ts         --> point to [name]Service
				  -> [name].component.html
				  -> [name]-routing.module.ts
 
 .\containers\_nav.ts     Change link

publish: https://www.c-sharpcorner.com/article/easily-deploy-angular-app-to-azure-from-visual-studio-code/

1. ng build

2. VS Code, left Icon, Azure Workloads->Pay-As-You-Go->NWIApps->select Squ
3. Azure -> APP SERVICE -> Squib (mouse right key) ->  Deploy to Web

*** The files in \dist and \dist\assets will be upload to Azure

npm install ngx-toastr --save npm install @angular/animations --save

PreviousDelete column from ArrayNextRemove shadow when print mat-dialog content

Last updated 1 year ago

Was this helpful?

🪤