我们在使用Angular框架构建Web应用的时候,往往离不开各种RESTAPI调用。这一次,我将就这个话题与大家进行深入的探讨。当然,由于会涉及到一定的代码层面的讨论,你可能需要了解HTTP、HTML、TypeScript和Angular框架。接下来我们简单了解一下Angular框架中服务和依赖注入的相关知识。什么是Angular服务?在真实的应用场景中,多个组件需要访问外部源的数据。Angular服务以Typescript类的形式编写,通常可以作为一个单一的、可重用的数据访问点来实现这一目的。通过在可注入服务类中定义此类处理任务,我们可以允许任何组件轻松访问这些定义的任务。什么是依赖注入?作为一种设计模式,Angular的依赖注入(DependencyInjection,DI)可以用来提供各种组件所需的各种依赖服务。例如,当一个组件需要将某个任务委托给某个服务时,我们可以将服务注入到组件中,这样组件就可以顺利访问服务类。为此,我们需要在服务类中使用@Injectable()装饰器,并允许Angular将其作为对元数据的依赖注入到组件中。Angular中的RESTAPI调用假设我们需要一个RESTAPI来管理操作,例如:创建、更新和删除博客。那么,让我们看看如何使用它将博客内容插入到MongoDB数据库中。调用RESTAPI的第一步是在AngularCLI中输入以下命令:nggenerateserviceRESTAPIService它将在现有项目的/src/app文件夹中创建一个TypeScript类——RESTAPIService。然后,您可以将以下TypeScript代码添加到相应的样板文件中。TypeScriptimport{Injectable}from'@angular/core';import{HttpClient,HttpHeaders}from'@angular/common/http'@Injectable({providedIn:'root'})exportclassRESTAPIService{constructor(privatehttp:HttpClient){}httpOptions={headers:newHttpHeaders({'Content-Type':'application/json'})};postBlog(blog:any){leturl="http://localhost:3000/blogs";返回这个。http.post(url,blog,this.httpOptions);}}如上面的代码片段所示,@Injectable()装饰器将使Angular项目中的RESTAPIService满足DI要求。元数据providedIn:'root'指定RestAPIService在所有组件中可见。提供者对象可以在服务本身的元数据中指定,或者在任何特定模块或组件中注册。要在任何特定模块或组件中注册它,我们需要分别使用@NgModule()或@Component()装饰器。该服务通过注入内置依赖项HttpClient与服务器通信。HttpClient服务将使用observable向服务器发起HTTP请求。在使用HttpClient之前,我们需要在根模块AppModule中导入Angular的HttpClientModule。HttpHeader类可以表示HTTP请求的各种标头配置选项。对于本篇博客的插入操作,我们需要添加一个值为application/json的Content-Type。它将以JSON格式指定博客内容。在postBlog()方法中,作为参数接收的博客内容将使用HTTPPOST方法发送到RESTAPI的URI--http://localhost:3000/blogs。服务器将处理请求并将各种JSON文档插入MongoDB数据库中。下图显示了用于收集博客内容的Angular表单,可能包括博客标题、摘要和文本字段。在Angular中,双向数据绑定可用于从Angular表单收集用户输入。属性指令[(ngModel)]实现双向绑定以在模板驱动的Angular表单中读取和写入用户输入值。有关此类双向数据绑定的详细信息,请参阅AngularDocs。事件绑定主要是用来绑定各种事件处理程序来处理用户操作触发的事件。对于本例中的博客插入操作,只要用户点击提交按钮,就会触发并执行saveBlog()方法。HTML
如上代码片段所示,TypeScript类将使用DI技术,在从本地项目目录导入服务的组件中注入RESTAPIService并将其实例化为构造函数参数。saveBlog()方法会从TypeScript变量(包括:标题、片段和文本)中读取用户输入的数据,并构造一个JSON对象--blog。它使用服务中定义的postBlog方法并订阅Httpclient服务返回的可观察对象来跟踪HTTP请求的状态。如果它成功完成相关操作,用户将被导航到ViewBlogs路由并显示博客内容列表。如果出现问题,它会在控制台上打印一条错误消息。TypeScriptimport{Component,OnInit}from'@angular/core';import{RESTAPIService}from'../restapidata.service';import{Router}from"@angular/router"@Component({selector:'app-postblog',templateUrl:'./postblog.component.html',styleUrls:['./postblog.component.css']})exportclassPostblogComponentimplementsOnInit{title=''snippet=''body=''constructor(privateservice:RESTAPIService,privaterouter:Router){}ngOnInit():void{}saveBlog(){letblog={title:this.title,snippet:this.snippet,body:this.body};this.service.postBlog(blog).subscribe({error:(err)=>{console.error(err)},complete:()=>{this.router.navigate(['viewblogs'])}});}}上面的总结简单概述了如何使用Angular框架进行RESTAPI调用。如果你是对这类技术感兴趣的Web开发者,可以在理解基本原理的基础上,通过上面介绍的代码片段使用Angular发起RESTAPI调用。原标题:HowtoMakeaRESTAPICallinAngular,作者:MuhammadImran发布新博客
/td>
