乐观积极的现实理想的 發表於 2020-5-16 16:29:00

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>&nbsp;</p>
<p>&nbsp;</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>&nbsp;</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>&nbsp;</p>
<p>&nbsp;</p>
<p><img alt=""></p>
<p>3.get请求数据</p>
<p>在用到请求数据的html中添加一个button并添加点击事件,然后再添加一个ul来显示获取到的数据</p>
<div class="cnblogs_code">
<pre>&lt;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>&gt;get请求数据&lt;/button&gt;
&lt;br&gt;
&lt;hr&gt;

&lt;ul&gt;
    &lt;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>&gt;{{item.title}}&lt;/li&gt;
&lt;/ul&gt;</pre>
</div>
<p>&nbsp;</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>&nbsp;</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) =&gt;<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>&nbsp;</p>
<p>其中api是获取数据的后台接口,这里数据在响应的result中,所以获取数据使用response.result</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162648904-1681796632.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img alt=""> </p>
<p>然后运行项目,点击按钮看效果</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162657657-1579256636.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</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>&nbsp;</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>&nbsp;</p>
<p>&nbsp;</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>&nbsp;</p>
<div class="cnblogs_code">
<pre>constructor(<span style="color: rgba(0, 0, 255, 1)">public</span> http:HttpClient) { }</pre>
</div>
<p>&nbsp;</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>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img alt=""> </p>
<p>其中app.js代码为 </p>
<p>&nbsp;</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>&nbsp;</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>&nbsp;</p>
<p>然后在此目录下打开cmd输入 </p>
<div class="cnblogs_code">
<pre>npm install</pre>
</div>
<p>&nbsp;</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>&nbsp;</p>
<p>&nbsp;</p>
<p><img alt=""></p>
<p>&nbsp;安装依赖完成后运行项目</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>&nbsp;</p>
<p>&nbsp;</p>
<p><img alt=""></p>
<p>然后打开浏览器输入</p>
<p>http://localhost:3000/</p>
<p>看到如下则是项目运行成功</p>
<p><img alt=""></p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162839352-871088888.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3><br>post提交数据&nbsp; </h3>
<p>首先在页面上添加一个按钮并设置按钮的点击事件 </p>
<div class="cnblogs_code">
<pre>&lt;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>&gt;post提交数据&lt;/button&gt;</pre>
</div>
<p>&nbsp;</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 =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(response);
      });

}</span></pre>
</div>
<p>&nbsp;</p>
<p>注意上面headers的书写方式 </p>
<p>然后运行项目点击按钮 </p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162911098-112235787.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>此时查看node服务端控制台</p>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/1328191/202005/1328191-20200516162923817-197378678.jpg" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</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]
查看完整版本: Angular中使用HttpClientModule模块实现get请求数据和post提交数据