介绍 在本文中,让我们看看如何创建一个ASP。NET Core CRUD web应用程序与Angular2动画使用模板包,web API和EF 1.0.1。 请注意 请阅读我以前的文章,其中深入解释了如何开始使用ASP。NET Core模板包。 ASP。NET Core Angular 2 EF 1.0.1 Web API使用模板包。https://www.codeproject.com/articles/1164078/asp-net-core-angular-master-detail-html-grid-using https://www.codeproject.com/articles/1168725/asp-net-core-angular-shopping-cart-using-web-api|0>>>> 在本文中,我们将看到以下内容: 创建CRUD web应用程序ASP。净核和角2 (创建):使用ASP将新的学生信息插入到数据库中。NET Core, EF和Web API。(读):用ASP从数据库中选择学生的详细信息。NET Core, EF和Web API。U:(更新):用ASP更新学生资料到数据库。(删除):使用ASP从数据库中删除学生的详细信息。NET Core, EF和Web API。 我们将使用WEB API来执行CRUD操作。Web API有以下四种方法:Get/Post/Put和delete&put: 是请求数据。(选择)post 是创建一个数据。(插入)put 就是更新数据(update)。删除就是删除数据(delete)。 用简单的角度动画展示我们的CRUD应用程序更丰富。 用于淡出元素和控件的Angilar2动画。用于从左侧移动元素和控件的Angilar2动画。用于从右移动元素和控件的Angilar2动画。用于从顶部移动元素和控件的Angilar2动画。用于从底部移动元素和控件的Angilar2动画。 Angilar2动画放大按钮点击。 用于创建我们的ASP。NET Core, Angular2 CRUD动画我们会 在SQL Server中创建示例数据库和表,以显示在我们的web应用程序中。创建ASP。NET Core Angular 2 Starter应用程序(。NET Core)使用模板包。创建EF, DBContext类和模型类。为Get/Post/Put和delete&put方法创建WEB API。创建第一个组件TypeScript文件,以获取WEB API JSON结果使用Http模块的get /Post/Put和Delete 方法。为动画和CRUD web应用程序创建第一个组件HTML文件。 先决条件 确保已在计算机中安装了所有先决条件。如果没有,那么下载并安装所有,一个一个。 首先,从这个链接下载并安装带有更新3的Visual Studio 2015。如果你有Visual Studio 2015,但还没有更新到更新3,从这个链接下载并安装Visual Studio 2015更新3。下载并安装。net Core 1.0.1下载并安装TypeScript 2.0下载安装Node.js v4.0或以上版本。我安装了V6.9.1(下载链接)。下载和安装下载ASP。NET Core模板包visz文件从这个链接。 使用的代码 步骤1创建数据库和表 我们将使用我们的SQL Server数据库为我们的WEB API和EF。首先,我们创建一个名为StudentsDB的数据库和一个名为StudentMaster的表。下面是用于在表中创建数据库表和示例记录插入查询的SQL脚本。在您的本地SQL服务器中运行以下查询,以创建在我们的项目中使用的数据库和表。 隐藏,收缩,复制Code

  1. USE MASTER
  2. GO
  3.  
  4. -- 1) Check for the Database Exists .If the database is exist then drop and create new DB
  5. IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'StudentsDB' )
  6. DROP DATABASE StudentsDB
  7. GO
  8.  
  9. CREATE DATABASE StudentsDB
  10. GO
  11.  
  12. USE StudentsDB
  13. GO
  14.  
  15. -- 1) //////////// StudentMasters
  16.  
  17. IF EXISTS ( SELECT [name] FROM sys.tables WHERE [name] = 'StudentMasters' )
  18. DROP TABLE StudentMasters
  19. GO
  20.  
  21. CREATE TABLE [dbo].[StudentMasters](
  22. [StdID] INT IDENTITY PRIMARY KEY,
  23. [StdName] [varchar](100) NOT NULL,
  24. [Email] [varchar](100) NOT NULL,
  25. [Phone] [varchar](20) NOT NULL,
  26. [Address] [varchar](200) NOT NULL
  27. )
  28.  
  29. -- insert sample data to Student Master table
  30. INSERT INTO [StudentMasters] ([StdName],[Email],[Phone],[Address])
  31. VALUES ('Shanu','syedshanumcain@gmail.com','01030550007','Madurai,India')
  32.  
  33. INSERT INTO [StudentMasters] ([StdName],[Email],[Phone],[Address])
  34. VALUES ('Afraz','Afraz@afrazmail.com','01030550006','Madurai,India')
  35.  
  36. INSERT INTO [StudentMasters] ([StdName],[Email],[Phone],[Address])
  37. VALUES ('Afreen','Afreen@afreenmail.com','01030550005','Madurai,India')
  38.  
  39. select * from [StudentMasters]

步骤2-创建ASP。NET Core Angular 2应用程序 在安装了上面列出的所有先决条件和ASP。NET Core模板,点击开始>>项目在祝辞Visual Studio 2015 >>Visual Studio 2015,在你的桌面上。单击New祝辞祝辞项目。选择Web祝辞祝辞ASP。NET Core Angular 2启动器。输入项目名称并单击OK。 在创建ASP。NET Core Angular 2应用,等几秒钟。您将看到所有依赖项都将自动恢复。 什么是新的ASP。NET Core模板包解决方案? WWWroot 我们可以看到所有的CSS,JS文件被添加到" dist "文件夹下。"主客户端。js”文件是重要的文件,因为所有Angular2结果将被编译,结果将从这个“js”文件加载到我们的html文件。 ClientApp文件夹: 我们可以在项目解决方案中看到一个新的文件夹ClientApp。这个文件夹包含了所有与Angular2相关的应用程序,比如模块、组件等等。我们可以将所有Angular2相关的模块、组件、模板HTML文件都添加到这个文件夹中,我们可以在下面的文章中看到如何创建我们自己的Angular2应用程序的细节。 在app文件夹下的Components文件夹中,我们可以看到很多子文件夹,比如app. counter, fetchdata, home和navemenu。默认情况下,所有示例应用程序都已创建,当我们运行应用程序时,可以看到所有示例Angular2应用程序的结果。 当我们运行应用程序时,我们可以看到在左边作为导航,在右边包含数据。所有Angular2样品将从t开始装载他上面的文件夹。 3) Controllers文件夹:这是我们的MVC Controller文件夹,我们可以在这个文件夹中创建MVC和Web API Controller。 4)视图文件夹:这是我们的MVC视图文件夹。 5)其他重要文件 我们还可以看到其他重要的ASP。NET Core重要的其他文件 项目。json: ASP。NET Core依赖列表可以在这个文件中找到,我们将在这个文件的依赖部分添加我们的实体框架。 包中。json:这是另一个重要的文件,因为所有与Angular2相关的依赖项列表都将在这里默认添加。NET Core模板包。 appsettings。json:我们可以在这个应用程序设置中添加数据库连接字符串。json文件。 我们将在我们的项目中使用所有这些来创建、构建和运行我们的Angular 2。NET Core模板包,WEB API和EF 1.0.1 步骤- 3创建实体自由工作 添加实体框架包 在我们的ASP中添加实体框架包。打开项目。将下面一行添加到。 注意:这里我们使用的是EF版本1.0.1。 隐藏,复制Code

  1. "Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
  2. "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"

当我们保存项目时。我们可以看到json文件的引用被恢复。 几秒钟后,我们可以看到实体框架包已经恢复,所有的引用已经添加。 添加连接字符串 要用SQL连接添加连接字符串,请打开“appsettings”。是的,这是json文件,这个文件在默认情况下看起来像下图。 在这个appsettings。json文件添加我们的连接字符串 隐藏,复制Code

  1. "ConnectionStrings": {
  2. "DefaultConnection": "Server=YOURDBSERVER;Database=StudentsDB;user id=SQLID;password=SQLPWD;Trusted_Connection=True;MultipleActiveResultSets=true;"
  3. },

注意,根据本地连接更改SQL连接字符串。 下一步是创建一个名为“Data”的文件夹来创建我们的模型和DBContext类。 为Student创建模型类 我们可以通过在数据文件夹中添加一个新的类文件来创建模型。右键单击数据文件夹,然后单击Add>单击Class。输入类名为StudentMasters,然后单击Add。 在这个类中,我们首先创建属性变量add student。我们会在我们的WEB API控制器中使用这个。 隐藏,收缩,复制Code

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using System.ComponentModel.DataAnnotations;
  6.  
  7. namespace Angular2ASPCORE.Data
  8. {
  9. public class StudentMasters
  10. {
  11. [Key]
  12. public int StdID { get; set; }
  13.  
  14. [Required]
  15. [Display(Name = "Name")]
  16. public string StdName { get; set; }
  17.  
  18. [Required]
  19. [Display(Name = "Email")]
  20. public string Email { get; set; }
  21.  
  22. [Required]
  23. [Display(Name = "Phone")]
  24. public string Phone { get; set; }
  25.  
  26. public string Address { get; set; }
  27. }
  28. }

创建数据库上下文 DBContext是用于建立到数据库的连接的实体框架类 我们可以通过在数据文件夹中添加一个新的类文件来创建一个DBContext类。右键单击数据文件夹,然后单击Add>单击Class。输入类名StudentContext并单击Add。 在这个类中,我们继承了DbContext并为students表创建了Dbset。 隐藏,复制Code

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.EntityFrameworkCore;
  6.  
  7. namespace Angular2ASPCORE.Data
  8. {
  9. public class studentContext:DbContext
  10. {
  11. public studentContext(DbContextOptions<studentContext> options)
  12. :base(options) { }
  13. public studentContext() { }
  14. public DbSet<StudentMasters> StudentMasters { get; set; }
  15. }
  16. }

Startup.CS 现在我们需要将数据库连接字符串和提供程序添加为SQL SERVER。为此,我们在configure reservices方法下的start .cs文件中添加以下代码。 隐藏,复制Code

  1. // Add Entity framework .
  2. services.AddDbContext<studentContext>(options =>
  3. options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

步骤- 4为CRUD操作创建Web API 要创建我们的WEB API控制器,右键单击Controllers文件夹。单击Add并单击New Item。 单击ASP。右面入网单击Web API控制器类。输入名称为“StudentMastersAPI”。然后点击添加。 我们都知道,Web API是为浏览器和移动设备构建HTTP服务的一种简单而容易的方法。 Web API有以下四种方法:Get/Post/Put和Delete。 是请求数据。(选择)post 是创建一个数据。(插入)put 是更新数据。删除就是删除数据。 Get方法(选择操作) 方法是从选定的数据库中请求单个项目或项目列表。在这里,我们将从StudentMasters表中获取所有学生信息。 隐藏,复制Code

  1. [HttpGet]
  2. [Route("Student")]
  3. public IEnumerable<StudentMasters> GetStudentMasters()
  4. {
  5. return _context.StudentMasters;
  6.  
  7. }

Post方法(插入操作) Post方法将用于插入数据到我们的数据库。在Post方法中,我们还将检查是否已经创建了StudentID并返回消息。我们将把所有用于插入的Student Master列参数传递给Student Master表。 隐藏,收缩,复制Code

  1. // POST: api/StudentMastersAPI
  2. [HttpPost]
  3. public async Task<IActionResult> PostStudentMasters([FromBody] StudentMasters studentMasters)
  4. {
  5. if (!ModelState.IsValid)
  6. {
  7. return BadRequest(ModelState);
  8. }
  9.  
  10. _context.StudentMasters.Add(studentMasters);
  11. try
  12. {
  13. await _context.SaveChangesAsync();
  14. }
  15. catch (DbUpdateException)
  16. {
  17. if (StudentMastersExists(studentMasters.StdID))
  18. {
  19. return new StatusCodeResult(StatusCodes.Status409Conflict);
  20. }
  21. else
  22. {
  23. throw;
  24. }
  25. }
  26.  
  27. return CreatedAtAction("GetStudentMasters", new { id = studentMasters.StdID }, studentMasters);
  28. }
  29. private bool StudentMastersExists(int id)
  30. {
  31. return _context.StudentMasters.Any(e => e.StdID == id);
  32. }

Put方法(更新操作) Put方法将被用来更新所选学生的数据到我们的数据库中。在Put方法中,我们将通过StudentID和所有其他参数进行更新。我们通过StudentID更新StudentMaster表。 隐藏,收缩,复制Code

  1. // PUT: api/StudentMastersAPI/5
  2. [HttpPut("{id}")]
  3. public async Task<IActionResult> PutStudentMasters([FromRoute] int id, [FromBody] StudentMasters studentMasters)
  4. {
  5. if (!ModelState.IsValid)
  6. {
  7. return BadRequest(ModelState);
  8. }
  9.  
  10. if (id != studentMasters.StdID)
  11. {
  12. return BadRequest();
  13. }
  14.  
  15. _context.Entry(studentMasters).State = EntityState.Modified;
  16.  
  17. try
  18. {
  19. await _context.SaveChangesAsync();
  20. }
  21. catch (DbUpdateConcurrencyException)
  22. {
  23. if (!StudentMastersExists(id))
  24. {
  25. return NotFound();
  26. }
  27. else
  28. {
  29. throw;
  30. }
  31. }
  32.  
  33. return NoContent();
  34. }

删除方法(删除操作) 方法将用于从数据库中删除所选的学生数据。在删除方法中,我们将通过StudentID删除记录。 隐藏,复制Code

  1. // DELETE: api/StudentMastersAPI/5
  2. [HttpDelete("{id}")]
  3. public async Task<IActionResult> DeleteStudentMasters([FromRoute] int id)
  4. {
  5. if (!ModelState.IsValid)
  6. {
  7. return BadRequest(ModelState);
  8. }
  9.  
  10. StudentMasters studentMasters = await _context.StudentMasters.SingleOrDefaultAsync(m => m.StdID == id);
  11. if (studentMasters == null)
  12. {
  13. return NotFound();
  14. }
  15.  
  16. _context.StudentMasters.Remove(studentMasters);
  17. await _context.SaveChangesAsync();
  18.  
  19. return Ok(studentMasters);
  20. }

要测试Get方法,我们可以运行我们的项目并复制Get方法的api路径,这里我们可以看到Get的api路径是api/StudentMastersAPI/Student 运行程序并粘贴上面的API路径来测试我们的输出。 使用Angular2 我们在ClientApp/App文件夹下创建所有与Angular2相关的App、模块、服务、组件和html模板。 我们在app文件夹下创建了“students”文件夹来创建typescript和html文件来显示学生的详细信息。 5 .使用Angular2动画 角度动画都建立在st之上andard 网络动画API 。请检查这个参考链接,它解释了更多关于Angular2动画的细节https://angular.io/docs/ts/latest/guide/animations.html 在web应用程序中添加动画将为我们的网站提供更丰富的外观。在这个应用程序中,我们将使用Angular2动画来实现点击事件时的渐变放大控件,并从左、右、顶部和底部移动元素或控件。 Angular2动画在家庭组件: 在这里,我们将在主页中添加动画。为此,我们编辑Home组件来创建我们的Angular2动画。 导入部分: 使用Angular2动画,我们需要首先导入“触发器,状态,样式,过渡,动画”。 我们的导入看起来是这样的 隐藏,复制Code

  1. import {Component, Input, trigger, state, style, transition, animate, keyframes} from <a href="mailto:'@angular/core'">'@angular/core'</a>;

组成部分 在组件中,我们需要添加动画:[]来执行带有触发器的动画。 触发器用于连接组件和HTML模板,例如,这里让我们看看如何创建一个简单的动画来更改单击事件上的按钮的颜色和大小。 首先,我们创建一个名为“moveBottom”的触发器,我们将在HTML元素或控件中使用这个触发器名从底部移动。在这个动画中,我们使用了transition('void =>'这意味着该动画将在页面加载期间执行。我们为“1”设置了胺化时间,在样式上我们设置了“translateY(-200px),这意味着我们最初将按钮的位置设置为底部-200从按钮的实际位置。当页面加载时,按钮将从-200 y轴位置开始并向上移动直到按钮的实际位置'translateY(0)' 隐藏,复制Code

  1. trigger('moveBottom', [
  2. transition('void => *', [
  3. animate('1s', keyframes([
  4. style({ opacity: 0, transform: 'translateY(-200px)', offset: 0 }),
  5. style({ opacity: 1, transform: 'translateY(25px)', offset: .75 }),
  6. style({ opacity: 1, transform: 'translateY(0)', offset: 1 }),
  7.  
  8. ]))
  9. ])
  10.  
  11. ])

在HTML模板中,我们将使用这个触发器名称和@符号来执行如下所示的动画。这里我们为div标签添加了动画。 隐藏,复制Code

  1. <div [@moveBottom]= ‘moveBottom’>
  2. ASP.NET Angular2
  3. </div>

和底部一样,我们做了其余的动画,左,右,顶部和淡入,这里是完整的代码为家庭动画组件。 隐藏,收缩,复制Code

  1. import { Component, Input, trigger, state, style, transition, animate, keyframes } from <a href="mailto:'@angular/core'">'@angular/core'</a>;
  2.  
  3. @Component({
  4. selector: 'home',
  5. animations: [
  6. trigger('moveBottom', [
  7. transition('void => *', [
  8. animate('1s', keyframes([
  9. style({ opacity: 0, transform: 'translateY(-200px)', offset: 0 }),
  10. style({ opacity: 1, transform: 'translateY(25px)', offset: .75 }),
  11. style({ opacity: 1, transform: 'translateY(0)', offset: 1 }),
  12.  
  13. ]))
  14. ])
  15.  
  16. ]),
  17. trigger('moveTop', [
  18.  
  19. transition('void => *', [
  20. animate('1s', keyframes([
  21. style({ opacity: 0, transform: 'translateY(+400px)', offset: 0 }),
  22. style({ opacity: 1, transform: 'translateY(25px)', offset: .75 }),
  23. style({ opacity: 1, transform: 'translateY(0)', offset: 1 }),
  24.  
  25. ]))
  26. ])
  27.  
  28. ]),
  29.  
  30. trigger('moveRight', [
  31.  
  32. transition('void => *', [
  33. animate('1s', keyframes([
  34. style({ opacity: 0, transform: 'translateX(-400px)', offset: 0 }),
  35. style({ opacity: 1, transform: 'translateX(25px)', offset: .75 }),
  36. style({ opacity: 1, transform: 'translateX(0)', offset: 1 }),
  37.  
  38. ]))
  39. ])
  40.  
  41. ]),
  42. trigger('movelLeft', [
  43.  
  44. transition('void => *', [
  45. animate('4s', keyframes([
  46. style({ opacity: 0, transform: 'translateX(+800px)', offset: 0 }),
  47. style({ opacity: 1, transform: 'translateX(150px)', offset: .75 }),
  48. style({ opacity: 1, transform: 'translateX(0)', offset: 1 }),
  49.  
  50. ]))
  51. ])
  52.  
  53. ]),
  54. trigger('fadeIn', [
  55.  
  56. transition('void => *', [
  57. animate('3s', keyframes([
  58. style({ opacity: 0, transform: 'translateX(0)', offset: 0 }),
  59. style({ opacity: 1, transform: 'translateX(0)', offset: 1 }),
  60. ]))
  61. ])
  62. ])
  63. ],
  64. template: require('./home.component.html')
  65. })
  66. export class HomeComponent {
  67. myName: string = "Shanu";
  68. }

下面是Home Html模板的完整代码。 隐藏,收缩,复制Code

  1. <h1[@fadeIn]='animStatus'>ASP.NET Core,Angular2 CRUD with Animation using Template Pack, WEB API and EF 1.0.1 </h1>
  2. <divclass="column">
  3.  
  4. <divstyle="background-color:#0094ff;color:#FFFFFF;font-size:xx-large;width:340px;height:50px;text-shadow: -2px -1px 0px #000,
  5. 0px -1px 0px #000,
  6. 1px -1px 0px #000,
  7. -2px 0px 0px #000,
  8. 1px 0px 0px #000,
  9. -2px 1px 0px #000,
  10. 0px 1px 0px #000,
  11. 1px 1px 0px #000;text-align:center;display:inline-block;
  12. border-color:#a2aabe;border-style:dashed;border-width:2px;"[@moveBottom]='moveBottom'>
  13.  
  14. ASP.NET Angular2
  15.  
  16. </div>
  17.  
  18. <divstyle="background-color:#ff00dc;color:#FFFFFF;font-size:xx-large;width:340px;height:50px;text-shadow: -2px -1px 0px #000,
  19. 0px -1px 0px #000,
  20. 1px -1px 0px #000,
  21. -2px 0px 0px #000,
  22. 1px 0px 0px #000,
  23. -2px 1px 0px #000,
  24. 0px 1px 0px #000,
  25. 1px 1px 0px #000;text-align:center;display:inline-block;
  26. border-color:#a2aabe;border-style:dashed;border-width:2px;"[@moveTop]='moveTop'>
  27.  
  28. CRUD
  29.  
  30. </div>
  31.  
  32. <divstyle="background-color:#3ab64a;color:#FFFFFF;font-size:xx-large;width:340px;height:50px;text-shadow: -2px -1px 0px #000,
  33. 0px -1px 0px #000,
  34. 1px -1px 0px #000,
  35. -2px 0px 0px #000,
  36. 1px 0px 0px #000,
  37. -2px 1px 0px #000,
  38. 0px 1px 0px #000,
  39. 1px 1px 0px #000;text-align:center;display:inline-block;
  40. border-color:#a2aabe;border-style:dashed;border-width:2px;"[@moveRight]='moveRight'>
  41.  
  42. Animation
  43.  
  44. </div>
  45. </div>
  46. <divclass="column">
  47. <h2>Created by : </h2>
  48. <divstyle="background-color:#ff6a00;color:#FFFFFF;font-size:xx-large;width:320px;height:50px;text-shadow: -2px -1px 0px #000,
  49. 0px -1px 0px #000,
  50. 1px -1px 0px #000,
  51. -2px 0px 0px #000,
  52. 1px 0px 0px #000,
  53. -2px 1px 0px #000,
  54. 0px 1px 0px #000,
  55. 1px 1px 0px #000;text-align:center;
  56. border-color:#a2aabe;border-style:dashed;border-width:2px;"[@movelLeft]='movelLeft'>
  57.  
  58. {{myName}}
  59.  
  60. </div>
  61. </div>

步骤- 6创建组件TypeScript 右键单击学生文件夹,然后单击添加新项目。从左侧选择客户端,选择TypeScript文件,并将该文件命名为“students.component.ts”,然后点击添加。 在student。component。ts文件中我们有三个部分, 接下来是组件部分,接下来是用于编写业务逻辑的类。 首先,我们导入angular文件用于我们的组件,这里我们导入http用于在我们的Angular2组件和动画中使用http客户端。 在组件中,我们有选择器、动画和模板。Selector是为这个应用程序提供一个名称,在html文件中,我们使用这个选择器名称来显示在html页面中。动画是用来执行动画为我们的Angular2应用。正如我们在home组件中看到的,我们使用了移动、左、右、底、上和淡入,我们将在CRDU页面中使用相同的动画。 在模板中,我们给出输出的html文件名。这里我们将创建一个html文件为“students.component.html”。 导出类是主要类,我们在其中执行要在组件模板中使用的所有业务逻辑和变量声明。在这个类中,我们获得API方法结果并将结果绑定到student数组,我们还将执行rest或Post、Put和Delete方法来执行CRUD操作。 隐藏,收缩,复制Code

  1. import {
  2. Component, Input, trigger,
  3. state,
  4. style,
  5. transition,
  6. animate,
  7. keyframes } from <a href="mailto:'@angular/core'">'@angular/core'</a>;
  8. import { Http, Response, Headers, RequestOptions } from <a href="mailto:'@angular/http'">'@angular/http'</a>;
  9. import { FormsModule } from <a href="mailto:'@angular/forms'">'@angular/forms'</a>;
  10.  
  11. @Component({
  12. selector: 'students'
  13. ,
  14.  
  15. animations: [
  16.  
  17. trigger('buttonReSize', [
  18. state('inactive', style({
  19. transform: 'scale(1)',
  20. backgroundColor: '#f83500'
  21. })),
  22. state('active', style({
  23. transform: 'scale(1.4)',
  24. backgroundColor: '#0094ff'
  25. })),
  26. transition('inactive => active', animate('100ms ease-in')),
  27. transition('active => inactive', animate('100ms ease-out'))
  28. ]),
  29.  
  30. trigger('moveBottom', [
  31.  
  32. transition('void => *', [
  33. animate(900, keyframes([
  34. style({ opacity: 0, transform: 'translateY(-200px)', offset: 0 }),
  35. style({ opacity: 1, transform: 'translateY(25px)', offset: .75 }),
  36. style({ opacity: 1, transform: 'translateY(0)', offset: 1 }),
  37.  
  38. ]))
  39. ])
  40.  
  41. ]),
  42. trigger('moveTop', [
  43.  
  44. transition('void => *', [
  45. animate(900, keyframes([
  46. style({ opacity: 0, transform: 'translateY(+400px)', offset: 0 }),
  47. style({ opacity: 1, transform: 'translateY(25px)', offset: .75 }),
  48. style({ opacity: 1, transform: 'translateY(0)', offset: 1 }),
  49.  
  50. ]))
  51. ])
  52.  
  53. ]),
  54.  
  55. trigger('moveRight', [
  56.  
  57. transition('void => *', [
  58. animate(900, keyframes([
  59. style({ opacity: 0, transform: 'translateX(-400px)', offset: 0 }),
  60. style({ opacity: 1, transform: 'translateX(25px)', offset: .75 }),
  61. style({ opacity: 1, transform: 'translateX(0)', offset: 1 }),
  62.  
  63. ]))
  64. ])
  65.  
  66. ]),
  67. trigger('movelLeft', [
  68.  
  69. transition('void => *', [
  70. animate(900, keyframes([
  71. style({ opacity: 0, transform: 'translateX(+400px)', offset: 0 }),
  72. style({ opacity: 1, transform: 'translateX(25px)', offset: .75 }),
  73. style({ opacity: 1, transform: 'translateX(0)', offset: 1 }),
  74.  
  75. ]))
  76. ])
  77.  
  78. ]),
  79. trigger('fadeIn', [
  80. transition('* => *', [
  81. animate('1s', keyframes([
  82. style({ opacity: 0, transform: 'translateX(0)', offset: 0 }),
  83. style({ opacity: 1, transform: 'translateX(0)', offset: 1 }),
  84. ]))
  85. ])
  86. ]),
  87.  
  88. ],
  89. template: require('./students.component.html')
  90. })
  91.  
  92. export class studentsComponent {
  93. // to get the Student Details
  94. public student: StudentMasters[] = [];
  95. // to hide and Show Insert/Edit
  96. AddstudetnsTable: Boolean = false;
  97. // To stored Student Informations for insert/Update and Delete
  98. public StdIDs = "0";
  99. public StdNames = "";
  100. public Emails = "";
  101. public Phones = "";
  102. public Addresss= "";
  103.  
  104. //For display Edit and Delete Images
  105. public imgEdit = require("./Images/edit.gif");
  106. public imgDelete = require("./Images/delete.gif");
  107.  
  108. myName: string;
  109. //for animation status
  110. animStatus: string = 'inactive';
  111. constructor(public http: Http) {
  112. this.myName = "Shanu";
  113. this.AddstudetnsTable = false;
  114. this.getData();
  115. }
  116.  
  117. //for Animation to toggle Active and Inactive
  118. animButton() {
  119. this.animStatus = (this.animStatus === 'inactive' ? 'active' : 'inactive');
  120. }
  121.  
  122. //to get all the Student data from Web API
  123. getData()
  124. {
  125. this.http.get('/api/StudentMastersAPI/Student').subscribe(result => {
  126. this.student = result.json();
  127. });
  128. }
  129.  
  130. // to show form for add new Student Information
  131. AddStudent() {
  132. this.animButton();
  133. this.AddstudetnsTable = true;
  134. this.StdIDs = "0";
  135. this.StdNames = "";
  136. this.Emails = "";
  137. this.Phones = "";
  138. this.Addresss = "";
  139. }
  140.  
  141. // to show form for edit Student Information
  142. editStudentsDetails(StdID, StdName, Email, Phone, Address) {
  143. this.animButton();
  144. this.AddstudetnsTable = true;
  145. this.StdIDs = StdID;
  146. this.StdNames = StdName;
  147. this.Emails = Email;
  148. this.Phones = Phone;
  149. this.Addresss = Address;
  150. }
  151.  
  152. // If the studentid is 0 then insert the student infromation using post and if the student id is more than 0 then edit using put mehod
  153. addStudentsDetails(StdID, StdName, Email, Phone, Address) {
  154. alert(StdName);
  155. var headers = new Headers();
  156. headers.append('Content-Type', 'application/json; charset=utf-8');
  157. if (StdID == 0)
  158. {
  159. this.http.post('api/StudentMastersAPI', JSON.stringify({ StdID: StdID, StdName: StdName, Email: Email, Phone: Phone, Address: Address }), { headers: headers }).subscribe();
  160. alert("Student Detail Inserted");
  161. }
  162. else
  163. {
  164. this.http.put('api/StudentMastersAPI/' + StdID, JSON.stringify({ StdID: StdID, StdName: StdName, Email: Email, Phone: Phone, Address: Address }), { headers: headers }).subscribe();
  165. alert("Student Detail Updated");
  166. }
  167.  
  168. this.AddstudetnsTable = false;
  169. this.getData();
  170. }
  171.  
  172. //to Delete the selected student detail from database.
  173. deleteStudentsDetails(StdID) {
  174. var headers = new Headers();
  175. headers.append('Content-Type', 'application/json; charset=utf-8');
  176.  
  177. this.http.delete('api/StudentMastersAPI/' + StdID, { headers: headers }).subscribe();
  178. alert("Student Detail Deleted");
  179. this.getData();
  180. }
  181.  
  182. closeEdits()
  183. {
  184. this.AddstudetnsTable = false;
  185. this.StdIDs = "0";
  186. this.StdNames = "";
  187. this.Emails = "";
  188. this.Phones = "";
  189. this.Addresss = "";
  190. }
  191. }
  192.  
  193. export interface StudentMasters {
  194. stdID: number;
  195. stdName: string;
  196. email: string;
  197. phone: string;
  198. address: string;
  199. }

步骤- 7创建HTML模板文件 右键单击学生文件夹,然后单击添加新项目。从左侧选择客户端,选择html文件,并将该文件命名为“students.component.html”,然后单击添加。 编写下面的html代码来将结果绑定到html页面中。 隐藏,收缩,复制Code

  1. <h1[@fadeIn]='animStatus'>ASP.NET Core,Angular2 CRUD with Animation using Template Pack, WEB API and EF 1.0.1 </h1>
  2. <divclass="column">
  3.  
  4. <h2>Created by : </h2>
  5. <divstyle="background-color:#ff6a00;color:#FFFFFF;font-size:xx-large;width:260px;height:50px;text-shadow: -2px -1px 0px #000,
  6. 0px -1px 0px #000,
  7. 1px -1px 0px #000,
  8. -2px 0px 0px #000,
  9. 1px 0px 0px #000,
  10. -2px 1px 0px #000,
  11. 0px 1px 0px #000,
  12. 1px 1px 0px #000;text-align:center;
  13. border-color:#a2aabe;border-style:dashed;border-width:2px;"[@movelLeft]='animStatus'>
  14.  
  15. {{myName}}
  16.  
  17. </div>
  18. </div>
  19.  
  20. <hrstyle="height: 1px;color: #123455;background-color: #d55500;border: none;color: #d55500;"/>
  21. <p*ngIf="!student"><em>Loading Student Details please Wait ! ...</em></p>
  22.  
  23. <tableid="tblContainer"style='width: 99%;table-layout:fixed;'>
  24. <tr>
  25. <td>
  26. <tablestyle="background-color:#FFFFFF; border: dashed 3px #FFFFFF; padding: 5px;width: 99%;table-layout:fixed;"cellpadding="2"cellspacing="2">
  27. <trstyle="height: 30px; color:#123455 ;border: solid 1px #659EC7;">
  28. <tdwidth="40px">&nbsp;</td>
  29. <tdwidth="50%">
  30. <h1> Add New Students Information <strongstyle="color:#0094ff"> </strong></h1>
  31.  
  32. </td>
  33. <tdalign="right">
  34. <button(click)=AddStudent() style="background-color:#f83500;color:#FFFFFF;font-size:large;width:260px;height:50px;
  35. border-color:#a2aabe;border-style:dashed;border-width:2px;"[@moveRight]='animStatus'[@buttonReSize]='animStatus'>
  36. Add New Studetnt Information
  37. </button>
  38. &nbsp;
  39. </td>
  40. </tr>
  41. </table>
  42.  
  43. </td>
  44. </tr>
  45. <tr>
  46. <td>
  47. <hrstyle="height: 1px;color: #123455;background-color: #d55500;border: none;color: #d55500;"/>
  48. </td>
  49. </tr>
  50. <tr*ngIf="AddstudetnsTable">
  51. <td[@fadeIn]='animStatus'>
  52. <table>
  53. <tr>
  54. <td>
  55.  
  56. <tablestyle="background-color:#FFFFFF; border: dashed 3px #6D7B8D; padding :5px;width :99%;table-layout:fixed;"cellpadding="2"cellspacing="2">
  57. <trstyle="height: 30px; background-color:#336699 ; color:#FFFFFF ;border: solid 1px #659EC7;">
  58. <tdwidth="40">
  59. &nbsp;
  60. </td>
  61. <td>
  62. <h2>Insert/Edit Student Details : </h2>
  63. </td>
  64. </tr>
  65. <tr>
  66. <tdwidth="100">
  67. &nbsp;
  68. </td>
  69. <td>
  70. <tablestyle="color:#9F000F;font-size:large; padding :5px;"cellpadding="12"cellspacing="16">
  71. <tr>
  72. <td><b>Students ID: </b> </td>
  73. <td>
  74. <inputtype="text"#StdID(ngModel)="StdIDs"value="{{StdIDs}}"style="background-color:tan"readonly>
  75. </td>
  76. <tdwidth="20">&nbsp;</td>
  77. <td><b>Students Name: </b> </td>
  78. <td>
  79. <inputtype="text"#StdName(ngModel)="StdNames"value="{{StdNames}}">
  80. </td>
  81. <td></td>
  82. </tr>
  83. <tr>
  84. <td><b>Email: </b> </td>
  85. <td>
  86. <inputtype="text"#Email(ngModel)="Emails"value="{{Emails}}">
  87. </td>
  88. <tdwidth="20">&nbsp;</td>
  89. <td><b>Phone: </b> </td>
  90. <td>
  91. <inputtype="text"#Phone(ngModel)="Phones"value="{{Phones}}">
  92. </td>
  93. <td></td>
  94. </tr>
  95. <tr>
  96. <td><b>Address: </b> </td>
  97. <td>
  98. <inputtype="text"#Address(ngModel)="Addresss"value="{{Addresss}}">
  99.  
  100. </td>
  101. <tdwidth="20">&nbsp;</td>
  102. <tdalign="right"colspan="2">
  103. <button(click)=addStudentsDetails(StdID.value,StdName.value,Email.value,Phone.value,Address.value) style="background-color:#428d28;color:#FFFFFF;font-size:large;width:220px;
  104. border-color:#a2aabe;border-style:dashed;border-width:2px;"[@moveBottom]='animStatus'>
  105. Save
  106. </button>
  107.  
  108. </td>
  109. <td>
  110. &nbsp;&nbsp;&nbsp;
  111. <button(click)=closeEdits() style="background-color:#334668;color:#FFFFFF;font-size:large;width:180px;
  112. border-color:#a2aabe;border-style:dashed;border-width:2px;"[@moveTop]='animStatus'>
  113. Close
  114. </button>
  115. </td>
  116. </tr>
  117. </table>
  118. </td>
  119. </tr>
  120.  
  121. </table>
  122. </td>
  123. </tr>
  124. <tr>
  125. <tdcolspan="2">
  126. <hrstyle="height: 1px;color: #123455;background-color: #d55500;border: none;color: #d55500;"/>
  127. </td>
  128. </tr>
  129. </table>
  130. </td>
  131.  
  132. </tr>
  133. <tr>
  134. <td[@moveBottom]='animStatus'>
  135.  
  136. <tableclass='table'style="background-color:#FFFFFF; border:2px #6D7B8D; padding:5px;width:99%;table-layout:fixed;"cellpadding="2"cellspacing="2"*ngIf="student">
  137.  
  138. <trstyle="height: 30px; background-color:#336699 ; color:#FFFFFF ;border: solid 1px #659EC7;">
  139. <tdwidth="70"align="center">Edit</td>
  140. <tdwidth="70"align="center">Delete</td>
  141. <tdwidth="100"align="center">Student ID</td>
  142. <tdwidth="160"align="center">Student Name</td>
  143. <tdwidth="160"align="center">Email</td>
  144. <tdwidth="120"align="center">Phone</td>
  145. <tdwidth="180"align="center">Address</td>
  146.  
  147. </tr>
  148. <tbody*ngFor="let StudentMasters of student"[@moveTop]='animStatus'>
  149. <tr>
  150. <tdalign="center"style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
  151. <spanstyle="color:#9F000F">
  152. <imgsrc="{{imgEdit}}"style="height:32px;width:32px"(click)=editStudentsDetails(StudentMasters.stdID,StudentMasters.stdName,StudentMasters.email,StudentMasters.phone,StudentMasters.address)>
  153. </span>
  154.  
  155. </td>
  156.  
  157. <tdalign="center"style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
  158. <spanstyle="color:#9F000F">
  159. <imgsrc="{{imgDelete}}"style="height:32px;width:32px"(click)=deleteStudentsDetails(StudentMasters.stdID)>
  160. </span>
  161.  
  162. </td>
  163.  
  164. <tdalign="center"style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
  165. <spanstyle="color:#9F000F">{{StudentMasters.stdID}}</span>
  166. </td>
  167.  
  168. <tdalign="left"style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
  169. <spanstyle="color:#9F000F">{{StudentMasters.stdName}}</span>
  170. </td>
  171.  
  172. <tdalign="left"style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
  173. <spanstyle="color:#9F000F">{{StudentMasters.email}}</span>
  174. </td>
  175.  
  176. <tdalign="center"style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
  177. <spanstyle="color:#9F000F">{{StudentMasters.phone}}</span>
  178. </td>
  179.  
  180. <tdalign="left"style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
  181. <spanstyle="color:#9F000F">{{StudentMasters.address}}</span>
  182. </td>
  183. </tr>
  184. </tbody>
  185. </table>
  186. </td>
  187. </tr>
  188. </table>

增加学生导航菜单 我们可以在现有的菜单中添加新创建的student details菜单。 要添加新的导航菜单,请在导航菜单下打开“navmenu.component.html”。编写下面的代码来为学生添加导航菜单链接。 隐藏,复制Code

  1. <li[routerLinkActive]="['link-active']">
  2. <a[routerLink]="['/students']">
  3. <spanclass='glyphicon glyphicon-th-list'></span> Students
  4. </a>
  5. </li>

步骤9 App模块 App模块是所有文件的根目录,我们可以找到App。Module。ClientApp\ app下的ts 导入我们的学生组件 隐藏,复制Code

  1. import { studentsComponent } from './components/students/students.component';

接下来在@NGModule中添加studentsComponent 在路由中添加我们的学生路径。 代码将是这样的 隐藏,收缩,复制Code

  1. import { NgModule } from <a href="mailto:'@angular/core'">'@angular/core'</a>;
  2. import { RouterModule } from <a href="mailto:'@angular/router'">'@angular/router'</a>;
  3. import { UniversalModule } from 'angular2-universal';
  4. import { AppComponent } from './components/app/app.component'
  5. import { NavMenuComponent } from './components/navmenu/navmenu.component';
  6. import { HomeComponent } from './components/home/home.component';
  7. import { FetchDataComponent } from './components/fetchdata/fetchdata.component';
  8. import { CounterComponent } from './components/counter/counter.component';
  9. import { studentsComponent } from './components/students/students.component';
  10.  
  11. @NgModule({
  12. bootstrap: [ AppComponent ],
  13. declarations: [
  14. AppComponent,
  15. NavMenuComponent,
  16. CounterComponent,
  17. FetchDataComponent,
  18. HomeComponent,
  19. studentsComponent
  20. ],
  21. imports: [
  22. UniversalModule, // Must be first import. This automatically imports BrowserModule, HttpModule, and JsonpModule too.
  23. RouterModule.forRoot([
  24. { path: '', redirectTo: 'home', pathMatch: 'full' },
  25. { path: 'home', component: HomeComponent },
  26. { path: 'counter', component: CounterComponent },
  27. { path: 'fetch-data', component: FetchDataComponent },
  28. { path: 'students', component: studentsComponent },
  29. { path: '**', redirectTo: 'home' }
  30. ])
  31. ]
  32. })
  33. export class AppModule {
  34. }

步骤- 10构建并运行应用程序 构建和运行应用程序,你可以看到我们的主页动画和学生CRUD页面动画。 的兴趣点 首先在SQL服务器中创建数据库和表。您可以运行本文中的SQL脚本来创建StudentsDB数据库和StudentMasters表,同时不要忘记更改“appsettings.json”中的连接字符串。 历史 Angular2ASPCORE.zip——2017/03/02 本文转载于:http://www.diyabc.com/frontweb/news19913.html

ASP。netcore,Angular2 CRUD动画使用模板包,WEB API和EF 1.0.1的更多相关文章

  1. ASP。NET Core Blazor CRUD使用实体框架和Web API

    下载source code - 1.7 MB 介绍 *请查看我的Youtube视频链接来学习ASP.NET Core Blazor CRUD使用实体框架和Web API. 在本文中,我们将了解如何为A ...

  2. 【ASP.NET MVC 5】第27章 Web API与单页应用程序

    注:<精通ASP.NET MVC 3框架>受到了出版社和广大读者的充分肯定,这让本人深感欣慰.目前该书的第4版不日即将出版,现在又已开始第5版的翻译,这里先贴出该书的最后一章译稿,仅供大家 ...

  3. 【转】asp.net Core 系列【二】—— 使用 ASP.NET Core 和 VS2017 for Windows 创建 Web API

    在本教程中,将生成用于管理“待办事项”列表的 Web API. 不会生成 UI. 概述 以下是将创建的 API: API 描述 请求正文 响应正文 GET /api/todo 获取所有待办事项 无 待 ...

  4. Asp.net MVC使用FormsAuthentication,MVC和WEB API可以共享身份认证 (转载)

    在实际的项目应用中,很多时候都需要保证数据的安全和可靠,如何来保证数据的安全呢?做法有很多,最常见的就是进行身份验证.验证通过,根据验证过的身份给与对应访问权限.同在Web Api中如何实现身份认证呢 ...

  5. ASP.NET MVC3 系列教程 - 部署你的WEB应用到IIS 6.0

    I:ASP.NET MVC3 部署的前期工作 1.确认部署的服务器操作系统环境 首先我们确认服务器的操作系统版本 可以从系统命令行工具里输入: systeminfo 获取相关操作系统信息例如 然后再确 ...

  6. 【原创】Asp.NET Core Web API与Vue 3.0搭建前后分离项目

    特地记录一下,网上的教程写的稀里糊涂的,整得我都心塞塞的,其实实现的过程蛮简单的 问题是这样的:我将Vue构建生成好的文件,放在后端wwwroot文件里面,并开启静态文件访问功能,结果总是无法显示相应 ...

  7. Asp.Net Core 3.1 学习3、Web Api 中基于JWT的token验证及Swagger使用

    1.初始JWT 1.1.JWT原理 JWT(JSON Web Token)是目前最流行的跨域身份验证解决方案,他的优势就在于服务器不用存token便于分布式开发,给APP提供数据用于前后端分离的项目. ...

  8. ASP.NETCore学习记录(一)

    ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure  0. ASP.NETCore 介绍 ASP.N ...

  9. 【ASP.NET Web API教程】2.1 创建支持CRUD操作的Web API

    原文 [ASP.NET Web API教程]2.1 创建支持CRUD操作的Web API 2.1 Creating a Web API that Supports CRUD Operations2.1 ...

随机推荐

  1. 剑指 Offer 53 - I. 在排序数组中查找数字 I

    题目描述 统计一个数字在排序数组中出现的次数. 示例1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例2: 输入: nums = [5,7,7,8,8, ...

  2. Oracle12C安装配置文档

    Oracle12C安装配置文档   Oracle12C安装配置文档 准备软件: 开始安装: 打开从官网下载下来的两个压缩包,进行解压 打开解压好的后缀为2of2的文件夹找到路径为database下的“ ...

  3. 从两表连接看Oracle sql优化器的效果

    select emp.*,dept.* from tb_emp03 emp,tb_dept03 dept where emp.deptno=dept.id -- 不加hint SQL> sele ...

  4. Nginx之https配置

    14.1. 对称加密 安全隐患:钥匙除我之外,还有多个人拥有.泄露风险较大,钥匙传递的过程风险较大 14.2. 非对称加密 优缺点:私钥很安全.但是非对称算法开销很大,大批量应用于业务,会导致性能成本 ...

  5. ThinkPHP6.0 判断是否有文件上传

    有必要考虑不是post请求或没有指定enctype="multipart/form-data"的情况.如果是post请求还是设置了正确的编码,没有文件上传时 request()-& ...

  6. python基础一(安装、变量、循环、git)

    一.开发语言分类 系统的开发语言有java.c++.c#.python.ruby.php等等,开发语言可分为编译型语言和解释型语言. 编译型语言就是写好代码之后就把代码编译成二进制文件,运行的时候运行 ...

  7. jmeter做简单的压测

    一.JMeter概述jmeter除了可以做借口测试外,还可以做压力测试:首先介绍jmeter中各个组件在压力测试中扮演的角色 1)线程(Threads(Users))即虚拟用户,线程组里可设置需要模拟 ...

  8. Java 8 Stream API实例

    一.开篇 Stream?其实就是处理集合的一种形式,称之为流,在Java8中被引入,可被Collection中的子类调用. 作用?简化代码,提升你的开发效率. 不会?看完这篇你就能自己上手了! 二.实 ...

  9. 【GIT-精讲】从零玩转Git/GitHub/GitLab

    关于版本控制 一.什么是版本控制 版本控制(Version Control Systems)版本控制(Revision control)是一种软件工程技巧 在开发的过程中,确保由不同人所编辑的同一档案 ...

  10. Kubernetes探针踩坑记

    1. 荒腔走板 最近一两个月生产K8s集群频繁出现短时503 Service Temporarily Unavailable,还不能主动复现,相当郁闷,压力山大. HTTP 5xx响应状态码用于定义服 ...