Angular中使用HttpClientModule模块实现get请求数据和post提交数据
<h1>场景</h1><p>Angular介绍、安装Angular Cli、创建Angular项目入门教程:</p>
<p>https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/105570017 </p>
<p>Angular新建组件以及组件之间的调用:</p>
<p>https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/105694997</p>
<p>通过以上搭建起Angular项目。</p>
<p>注:</p>
<p>博客: <br>https://blog.csdn.net/badao_liumang_qizhi
<br>关注公众号 <br>霸道的程序猿<br>获取编程相关电子书、教程推送与免费下载。</p>
<h1>实现 </h1>
<p>Angular5.x 以后get、post 和和服务器交互使用的是HttpClientModule 模块。
</p>
<h2>使用HttpClientModule实现get请求数据 </h2>
<p>1.在app.module.ts 中引入HttpClientModule 并注入 </p>
<div class="cnblogs_code">
<pre>import {HttpClientModule} <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@angular/common/http</span><span style="color: rgba(128, 0, 0, 1)">'</span>;</pre>
</div>
<p>注入</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">imports: [
BrowserModule,
FormsModule,
AppRoutingModule,
HttpClientModule
],</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162545336-1165682066.jpg" alt=""></p>
<p> </p>
<p> </p>
<p><img alt=""></p>
<p>2.在用到的地方引入HttpClient 并在构造函数声明</p>
<div class="cnblogs_code">
<pre>import {HttpClient} <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@angular/common/http</span><span style="color: rgba(128, 0, 0, 1)">"</span>;</pre>
</div>
<p> </p>
<div class="cnblogs_code">
<pre>constructor(<span style="color: rgba(0, 0, 255, 1)">public</span> http:HttpClient) { }</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162615923-805492067.jpg" alt=""></p>
<p> </p>
<p> </p>
<p><img alt=""></p>
<p>3.get请求数据</p>
<p>在用到请求数据的html中添加一个button并添加点击事件,然后再添加一个ul来显示获取到的数据</p>
<div class="cnblogs_code">
<pre><button (click) = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">getData()</span><span style="color: rgba(128, 0, 0, 1)">"</span>>get请求数据</button>
<br>
<hr>
<ul>
<li *ngFor = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">let item of list</span><span style="color: rgba(128, 0, 0, 1)">"</span>>{{item.title}}</li>
</ul></pre>
</div>
<p> </p>
<p>在ts中首先声明一个list数组来存储响应的数据 </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> list:any[] = [];</pre>
</div>
<p> </p>
<p>然后在按钮的点击事件中 </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">getData()
{
</span><span style="color: rgba(0, 0, 255, 1)">var</span> api = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://xxx.com/api/productlist</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.http.<span style="color: rgba(0, 0, 255, 1)">get</span>(api).subscribe((response:any) =><span style="color: rgba(0, 0, 0, 1)">{
console.log(response);
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.list =<span style="color: rgba(0, 0, 0, 1)"> response.result;
});
}</span></pre>
</div>
<p> </p>
<p>其中api是获取数据的后台接口,这里数据在响应的result中,所以获取数据使用response.result</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162648904-1681796632.jpg" alt=""></p>
<p> </p>
<p> </p>
<p> </p>
<p><img alt=""> </p>
<p>然后运行项目,点击按钮看效果</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162657657-1579256636.jpg" alt=""></p>
<p> </p>
<p> </p>
<p> </p>
<p><img alt=""> </p>
<h2>使用HttpClientModule实现post提交数据 </h2>
<p>1.在app.module.ts 中引入HttpClientModule 并注入 </p>
<div class="cnblogs_code">
<pre>import {HttpClientModule} <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@angular/common/http</span><span style="color: rgba(128, 0, 0, 1)">'</span>;</pre>
</div>
<p> </p>
<p>注入 </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">imports: [
BrowserModule,
FormsModule,
AppRoutingModule,
HttpClientModule
],</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162714374-13069048.jpg" alt=""></p>
<p> </p>
<p> </p>
<p><img alt=""></p>
<p>2.在用到的地方引入HttpClient 和HttpHeaders并在构造函数声明HttpClient</p>
<div class="cnblogs_code">
<pre>import {HttpClient,HttpHeaders} <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@angular/common/http</span><span style="color: rgba(128, 0, 0, 1)">"</span>;</pre>
</div>
<p> </p>
<div class="cnblogs_code">
<pre>constructor(<span style="color: rgba(0, 0, 255, 1)">public</span> http:HttpClient) { }</pre>
</div>
<p> </p>
<p>3.post提交数据 </p>
<p>为了测试效果搭建一个后台服务端,这里使用node </p>
<h3>搭建node服务端 </h3>
<p>新建文件夹nodejs_serve,然后在此文件夹下新建两个文件</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162736079-1551965121.jpg" alt=""></p>
<p> </p>
<p> </p>
<p> </p>
<p><img alt=""> </p>
<p>其中app.js代码为 </p>
<p> </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> express = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">express</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> app=<span style="color: rgba(0, 0, 0, 1)"> express();
</span><span style="color: rgba(0, 0, 255, 1)">var</span> bodyParser = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">body-parser</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)"> }));
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">express允许跨域</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
app.all(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">*</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, function(req, res, next) {
res.header(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Access-Control-Allow-Origin</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">*</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
res.header(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Access-Control-Allow-Headers</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Content-Type,Content-Length, Authorization, Accept,X-Requested-With</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
res.header(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Access-Control-Allow-Methods</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">PUT,POST,GET,DELETE,OPTIONS</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
res.header(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">X-Powered-By</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"> 3.2.1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(req.method==<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">OPTIONS</span><span style="color: rgba(128, 0, 0, 1)">"</span>) res.send(<span style="color: rgba(128, 0, 128, 1)">200</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">next();
});
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">app.use(express.static(path.join(__dirname, 'public')));</span>
<span style="color: rgba(0, 0, 0, 1)">
app.</span><span style="color: rgba(0, 0, 255, 1)">get</span>(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,function(req,res){
res.send(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">首页</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
})
app.post(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/dologin</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,function(req,res){
console.log(req.body);
res.json({</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">msg</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">post成功</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">});
})
app.</span><span style="color: rgba(0, 0, 255, 1)">get</span>(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/news</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,function(req,res){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">console.log(req.body);</span>
res.jsonp({<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">msg</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">这是新闻数据</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">});
})
app.listen(</span><span style="color: rgba(128, 0, 128, 1)">3000</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">127.0.0.1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span></pre>
</div>
<p> </p>
<p>然后package.json代码为 </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dependencies</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">: {
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ejs</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">^2.5.6</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">express</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">^4.15.3</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">socket.io</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">^2.0.3</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">body-parser</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">~1.17.1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
}
}</span></pre>
</div>
<p> </p>
<p>然后在此目录下打开cmd输入 </p>
<div class="cnblogs_code">
<pre>npm install</pre>
</div>
<p> </p>
<p>或者 </p>
<div class="cnblogs_code">
<pre>cnpm install</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162807677-667167236.jpg" alt=""></p>
<p> </p>
<p> </p>
<p><img alt=""></p>
<p> 安装依赖完成后运行项目</p>
<div class="cnblogs_code">
<pre>node app.js</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162826339-1241618299.jpg" alt=""></p>
<p> </p>
<p> </p>
<p><img alt=""></p>
<p>然后打开浏览器输入</p>
<p>http://localhost:3000/</p>
<p>看到如下则是项目运行成功</p>
<p><img alt=""></p>
<p> <img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162839352-871088888.jpg" alt=""></p>
<p> </p>
<p> </p>
<h3><br>post提交数据 </h3>
<p>首先在页面上添加一个按钮并设置按钮的点击事件 </p>
<div class="cnblogs_code">
<pre><button (click) = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">doLogin()</span><span style="color: rgba(128, 0, 0, 1)">"</span>>post提交数据</button></pre>
</div>
<p> </p>
<p>然后在点击事件多对应的方法中 </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">doLogin()
{
</span><span style="color: rgba(0, 0, 255, 1)">const</span> httpOptions =<span style="color: rgba(0, 0, 0, 1)"> {
headers: </span><span style="color: rgba(0, 0, 255, 1)">new</span> HttpHeaders({ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Content-Type</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">application/json</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)"> })
};
</span><span style="color: rgba(0, 0, 255, 1)">var</span> api = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://127.0.0.1:3000/doLogin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.http.post(api,{username:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">霸道</span><span style="color: rgba(128, 0, 0, 1)">'</span>,age:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">24</span><span style="color: rgba(128, 0, 0, 1)">'</span>},httpOptions).subscribe(response =><span style="color: rgba(0, 0, 0, 1)"> {
console.log(response);
});
}</span></pre>
</div>
<p> </p>
<p>注意上面headers的书写方式 </p>
<p>然后运行项目点击按钮 </p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162911098-112235787.jpg" alt=""></p>
<p> </p>
<p> </p>
<p>此时查看node服务端控制台</p>
<p> </p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162923817-197378678.jpg" alt=""></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><img alt=""></p>
</div>
<div id="MySignature" role="contentinfo">
博客园:
https://www.cnblogs.com/badaoliumangqizhi/
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。<br><br>
来源:https://www.cnblogs.com/badaoliumangqizhi/p/12901052.html
頁:
[1]