易于学习的.NET 6.0和Angular——Angular独立模板入门——第2部分

635 篇文章 16 订阅
238 篇文章 4 订阅

目录

介绍

背景

先决条件

Visual Studio 2022

使用代码

使用Angular模板创建ASP.NET Core

Visual Studio 2019 Angular Template项目

Visual Studio 2022 Angular独立项目

新的Angular文件部分

ASPNetCore-https.js

proy.config.js

为空ASP.NET Web API项目添加集成

添加WEB API项目

禁用WEB API项目的启动浏览器

选择启动项目

生成并运行应用程序

运行应用程序

ASP.NET Core WEB API Swagger结果

app.component.ts

学生总分

创建模型类

创建API控制器类

Angular部分

home组件

home.component.html

students组件

students.component.html

app.component.ts

app.component.html

app.module.ts

proxy.conf.js

构建和运行

兴趣点


介绍

 一直以来,我都计划发布.NET 6.0和Angular系列文章。在本系列中,我计划发表以下文章:

在本文中,我们将了解如何开始使用.NET 6.0Visual Studio 2022中提供的独立Angular模板。

在以前版本的Visual Studio(如2019)中,可以使用ASP.NET Core Angular Templates创建Angular项目,但在以前版本的Angular Template中,所有与Angular相关的项目都将添加到ClientAPP并包括API控制器和ASP.NET Core项目结构。在Visual Studio中,它可以被分割为Frontend UI部分和Backend API部分,默认情况下,Visual Studio 2022 ASP.CORE Angular独立项目仅包含与Angular相关的项目文件。我们看不到任何ASP.NET Core文件夹结构,如果我们想使用WEB API,那么我们可以在Angular Independent项目解决方案中添加新的WEB API项目。在本文中,我们将详细介绍这一点。

背景

先决条件

  • Visual Studio 2022
  • Node.js——如果您没有Node.js,请安装Node.js(下载链接)
  • Angular CLI(下载链接)

Visual Studio 2022

如果您尚未安装Visual Studio 2022,则可以从此链接下载它并将其安装在您的计算机上。

下载并安装Visual Studio 2022

注意:社区版本对所有人免费,您可以下载社区版本,就像没有安装密钥一样,如果您有安装密钥或MSDN订阅,则可以下载专业版或企业版。

作为微软MVP,我有MSDN订阅,并且安装了专业版。

使用代码

使用Angular模板创建ASP.NET Core

安装上面列出的所有先决条件后,单击桌面上的启动>>程序>> Visual Studio 2022 >> Visual Studio 2022。单击新建>>项目

搜索Angular模板并选择 ASP.NET Core with Angular,然后单击下一步

输入您的项目名称,然后单击下一步

如果要为项目使用ASP.NET CoreWEB API,则必须选中Add integration for Empty ASP.NET Web API然后单击创建按钮。

创建项目时,我们可以看到如下所示的解决方案结构:

在这里,我们可以看到添加了一些有趣的新文件,我们也可以看到在Visual Studio中,没有ASP.NET Core项目的结构。我们还可以在app文件夹中看到只有app.componentapp.module Angular文件存在。

Visual Studio 2019 Angular Template项目

如果您使用过Visual Studio 2019 ASP.NET Core Angular模板,我们知道项目结构,因为它将包含AngularASP.NET Core项目的组合。此外,在Angular项目中,我们可以看到使用此演示工作添加了一些示例,例如主页、获取数据主页导航菜单文件夹,我们将很容易根据我们的要求扩展项目和添加页面。

Visual Studio 2022 Angular独立项目

正如我们在Visual Studio 2022 Angular独立项目中看到的那样,没有示例演示Angular页面,如主页获取数据计数器导航栏。在这里,我们只能看到 App.component  app.module Angular主文件。Angular独立项目中也缺少ASP.NET Core项目结构。如果我们需要使用ASP.NET Core WEB API作为项目的后端,那么我们可以在Angular独立解决方案中添加新项目,并且可以将WEB API控制器添加到 proxy.conf.js文件中,我们将看到如何制作WEB API项目并将控件添加到我们的独立Angular项目中,详见下文:

新的Angular文件部分

ASPNetCore-https.js

JavaScript文件为应用程序设置HTTPS,目标是使用ASP.NET Core HTTPS证书。

proy.config.js

这个JavaScript文件用于添加我们的HTTPs端口,WEB API URL作为目标,在上下文中,我们将添加我们所有的控制器和方法,以便在Angular应用程序中访问。

为空ASP.NET Web API项目添加集成

注意:为了添加ASP.NET Core WEB API项目并将API集成到我们的Angular项目中,我们必须检查为ASP.NET Web API项目添加集成。

在这里,我们可以在下图中看到,因为我又创建了一个测试Angular独立项目,但这一次,我没有检查为ASP.NET Web API项目添加集成

当我们这次创建Angular独立项目时,我们可以看到Angular项目中缺少 proxy.conf.jsaspnetcore-https.js文件。为了集成ASP.NET CoreWEB APIproxy.conf.jsaspnetcore-https.js都非常重要。永远记住,如果要使用Visual Studio 2022为您的Angular独立项目集成ASP.NET CoreWEB API,则必须在创建项目期间选中为ASP.NET Web API项目添加集成

添加WEB API项目

现在,让我们使用我们的Angular独立解决方案创建新的ASP.NET Core WEB API项目。

右键单击Angular独立解决方案并添加新项目>选择ASP.NET Core Web API,然后单击下一步

输入项目名称并确保项目位于Angular独立解决方案下,然后单击下一步

我们可以看到,此处选择的框架是.NET 6.0,然后单击创建按钮。

现在我们可以看到我们的ASP.NET Core WEB API项目已添加到Angular Independent项目解决方案下。

禁用WEB API项目的启动浏览器

由于我们的AngularWEB API项目解决方案都在相同的解决方案中,因此我们不需要为AngularWEB API打开两个浏览器。我们的WEB API需要在后台运行,并在WEB API中执行CRUD操作和一些业务操作,所有数据显示和控件都将从Angular项目中的UI部分完成,所以现在,我们禁用了WEB API项目的启动浏览器选项。

右键单击我们的ASP.NET Core WEB API项目并选择属性>选择调试>单击打开调试启动配置文件UI >取消选中启动浏览器。

选择启动项目

现在我们需要让我们的AngularASP.NET Core WEB API项目都运行,我们还需要让启动项目最初启动。在这里,首先我们需要运行WEB API项目,然后是我们的Angular项目。

右键单击AngularASP.NET Core WEB API解决方案,然后选择属性。我们可以看到默认情况下它被选为单启动项目,在这里,我们可以看到我们的Angular独立项目已被选中。

为了同时运行我们的AngularASP.NET Core项目,我们需要选择多个启动项目并选择每个项目的操作作为开始。 确保你的ASP.NET Core WEB API作为Angular项目的顶部,就好像我们想在Angular中绑定ASP.NET Core结果一样,那么我们需要首先运行我们的WEB API项目,然后运行Angular项目。

生成并运行应用程序

当我们运行应用程序时,我们可以看到Angular组件无法在Angular页面中加载WEB API结果,因为我们没有在angular项目 proxy.conf.js 文件中添加WEB API URL

若要检查WEB API URL,请从ASP.NET Core WEB API项目中打开属性文件夹,然后打开 launchSetting.json 文件。检查applicationURL并选择https URL,如下所示:

Angular项目中打开 proxy.config.js 文件,并将复制的WEB API URL替换为目标,如下所示:

运行应用程序

现在,当您运行应用程序时,您可以看到ASP.NET Core WEB API天气预报已在Angular页面中进行了有用的分组。

ASP.NET Core WEB API Swagger结果

默认情况下将 Swagger 添加到 ASP.NET Core WEB API 项目中,以便检查和测试 WEB API 结果,当我们运行项目时,我们可以复制目标 URL 并在 URL https://localhost:7101/swagger/index.html 中添加 swagger 并运行它来测试和查看 WEB API 详细信息。

app.component.ts

Angular项目app.component文件中,我们可以看到,默认情况下,已经添加了代码来获取WEB API结果并在Angular页面中绑定:

import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  public forecasts?: WeatherForecast[];

  constructor(http: HttpClient) {
    http.get<WeatherForecast[]>('/weatherforecast').subscribe(result => {
      this.forecasts = result;
    }, error => console.error(error));
  }

  title = 'AngularStandAlone';
}

interface WeatherForecast {
  date: string;
  temperatureC: number;
  temperatureF: number;
  summary: string;
}

学生总分

现在让我们制作一个简单的WEB API控制器来获取学生总数分数。

创建模型类

为此,首先我们需要添加类文件来创建我们的Model类。右键单击ASP.NET Core WEB API项目,然后单击>添加新>选择“Class并将其命名为StudentDetails.cs然后单击添加

在类中,添加属性变量,如下面的代码:

public class StudentDetails
    {
        public String REG_Code { get; set; }
        public int StudentMark { get; set; }
    }

创建API控制器类

右键单击控制器文件夹,然后单击>添加>控制器。选择 API >选择 API控制器,然后单击添加

将空的API控制器名称指定为 StudentDetailsController.cs然后单击添加

在控制器中,我们添加了Get方法,该方法将创建随机的10名学生注册码以及500的随机学生总分,为此,我们创建随机范围以显示从300500的分数范围的结果。

ApiController]
    [Route("[controller]")]
    public class StudentDetailsController : ControllerBase
    {
        private readonly ILogger<StudentDetailsController> _logger;

        public StudentDetailsController(ILogger<StudentDetailsController> logger)
        {
            _logger = logger;
        }

        [HttpGet(Name = "StudentDetails")]
        public IEnumerable<StudentDetails> Get()
        {
            var rng = new Random();
            int ivale = 0;
            return Enumerable.Range(1, 10).Select(index => new StudentDetails
            {
                REG_Code = "STD_000" + rng.Next(1, 100),
                StudentMark = rng.Next(300, 500),
            }).ToArray(); ;
        }
    }
}

Angular部分

现在,让我们通过添加一些主页,学生页面来组织Angular项目,并将app.component页面中的fetchdata详细信息绑定到主页。另外,让我们添加导航菜单文件夹以导航到组件。

home组件

应用程序文件夹中添加新文件夹作为主页,并添加名称为 home.component htmltypescript

home组件中,我们可以复制app.component天气预报绑定详细信息并添加此home组件。

import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html'
})
export class HomeComponent {
  public forecasts?: WeatherForecast[];

  constructor(http: HttpClient) {
    http.get<WeatherForecast[]>('/weatherforecast').subscribe(result => {
      this.forecasts = result;
    }, error => console.error(error));
  }

  title = 'angularproject3';
}

interface WeatherForecast {
  date: string;
  temperatureC: number;
  temperatureF: number;
  summary: string;
}

home.component.html

html中,添加以下代码以显示天气预报详细信息的结果:

<h1 id="tableLabel">Weather forecast</h1>
<p>This component demonstrates fetching data from the server.</p>
<p *ngIf="!forecasts"><em>Loading... Please refresh once the ASP.NET backend 
 has started. See <a href="https://aka.ms/jspsintegrationangular">
 https://aka.ms/jspsintegrationangular</a> for more details.</em></p>

<table *ngIf="forecasts">
  <thead>
    <tr>
      <th>Date</th>
      <th>Temp. (C)</th>
      <th>Temp. (F)</th>
      <th>Summary</th>
    </tr>
  </thead>
  <tbody>
    <tr *ngFor="let forecast of forecasts">
      <td>{{ forecast.date }}</td>
      <td>{{ forecast.temperatureC }}</td>
      <td>{{ forecast.temperatureF }}</td>
      <td>{{ forecast.summary }}</td>
    </tr>
  </tbody>
</table>

students组件

应用程序文件夹中添加新文件夹作为students,并添加htmltypescript,然后命名为students.component

students组件中,我们将从WEB API获取StudentDetails并将结果绑定到studentdetails对象中:

import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';

@Component({
  selector: 'app-students',
  templateUrl: './students.component.html'
})
export class StudentsComponent {

  public studentdetails?: StudentDetails[];

  constructor(http: HttpClient) {
    http.get<StudentDetails[]>('/StudentDetails').subscribe(result => {
      this.studentdetails = result;
    }, error => console.error(error));
  }

  title = 'Item Sales Count';
}

interface StudentDetails {
  reG_Code: string;
  studentMark: number;
}

students.component.html

html页面中,我们绑定studentdetails结果以显示学生分数以及学生的注册码。

<table *ngIf="studentdetails">
  <thead>
    <tr>
      <th>Student Registratoin Code</th>
      <th>Students Total Mark</th>
    </tr>
  </thead>
  <tbody>
    <tr *ngFor="let stddtl of studentdetails">
      <td>{{ stddtl.reG_Code }}</td>
      <td align="right">{{ stddtl.studentMark }}</td>
    </tr>
  </tbody>
</table>

将新文件夹添加为应用程序文件夹内的navbar,然后添加htmltypescript,名称为navbar.component

导航栏组件用于导航到我们将在此项目中使用的不同菜单,因此在组件中,我们只是将组件名称添加为NavBarComponent,而不在类中添加任何函数。

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

@Component({
  selector: 'app-navbar',
  templateUrl: './navbar.component.html'
})
export class NavBarComponent {

}

html页面中,我们绑定添加导航路由器链接,如下所示,我们有主页和学生详细信息页面。

<a [routerLink]="['/home']"> Home</a> &nbsp;&nbsp;&nbsp; || &nbsp;&nbsp;&nbsp;

<a [routerLink]="['/students']"> Student Details</a>

app.component.ts

在应用程序组件中,我们替换以下代码,因为这是我们的主要组件,我们添加:

import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {   

  title = 'AngularStandAlone';
}

app.component.html

html页面中,我们将导航栏绑定body在标签内,并添加router-outlet以在div标签内显示我们的组件。

<body>
  <app-navbar></app-navbar>

  <div>
    <router-outlet></router-outlet>
  </div>

</body>

app.module.ts

app模块中,我们需要导入我们添加的所有新组件,并且我们还添加了用于添加所有路由和路由URL映射的RouterModule.forRoot组件。

import { BrowserModule } from '@angular/platform-browser';
import { Injectable, NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClient, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { RouterModule } from '@angular/router';

import { AppComponent } from './app.component';
import { StudentsComponent } from './students/students.component';
import { HomeComponent } from './home/home.component';
import { NavBarComponent } from './navbar/navbar.component';
@NgModule({
  declarations: [
    AppComponent,
    StudentsComponent,
    HomeComponent,
    NavBarComponent
  ],
  imports: [
    BrowserModule, HttpClientModule,
    RouterModule.forRoot([
      { path: 'home', component: HomeComponent, pathMatch: 'full' },
      { path: 'students', component: StudentsComponent },
      { path: 'home', component: HomeComponent },
      { path: 'navbar', component: NavBarComponent },
    ])
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

proxy.conf.js

构建我们需要在Angular项目中的 proxy.conf.js 文件的上下文中添加我们的studentDetails控制器。

构建和运行

生成并运行应用程序。我们可以看到,主页学生详细信息导航链接都已添加,我们可以导航到两个菜单并查看两个WEB API结果的结果。

兴趣点

希望本文有助于了解如何使用Visual Studio 2022开始使用ASP.NET CoreAngular独立项目。在下一部分中,我们将更详细地了解如何使用ASP.NET CoreAngular进行管理LTE设计。

https://www.codeproject.com/Articles/5334406/Easy-to-learn-NET-6-0-and-Angular-Getting-Starte-2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值