以角度 5 在 HTML 上显示来自 json 对象的数据

Posted

技术标签:

【中文标题】以角度 5 在 HTML 上显示来自 json 对象的数据【英文标题】:display data from json object on HTML in angular 5 【发布时间】:2018-10-08 21:10:36 【问题描述】:

你好,我想显示我使用后端 api (nodejs) 从 mongodb 获得的数据 这是事件模型的代码

const mongoose = require('mongoose');
const config = require('../config/database');

// Events Schema
const EventSchema = mongoose.Schema(
  eventname: 
    type: String,
    required: true
  ,
  eventstartdate: 
    type: String,
    required: true


  ,
  eventenddate: 
    type: String,
    required: true


  ,

  eventcategorie: 
    type: String


  ,
  eventdescription: 
    type: String


  ,
  eventimage: 
    type: String


  


);
const Event = module.exports = mongoose.model('Event', EventSchema);

这是来自路由器的代码

    const express = require('express');
    const router = express.Router();
    const passport = require('passport');
    const jwt = require('jsonwebtoken');
    const config = require ('../config/database');
    const User = require('../models/user');
    const Event = require('../models/event');

    //get event by id
router.get('/event/:eventid', (req,res) => 
  Event.findById(req.params.eventid, (err, event) =>   
  if (err)
    return res.status(500).send(message:err.message);
  
  if(!event)
    return res.status(400).send(message:'Event not found');
  

  res.json(

    event: 
      id: event._id,
      eventname: event.eventname,
      eventstartdate: event.eventstartdate,
      eventenddate: event.eventenddate,
      eventcategorie: event.eventcategorie,
      eventdescription: event.eventdescription,
      eventimage: event.eventimage

    

  );
);
);

这是角度服务中的代码

// GET an event by ID
   displayEvent$(id: string) 
    return this.http.get(`http://localhost:3000/users/event/$id`)
    .map(response => response.json());
  

然后我创建了一个由按钮触发的简单方法 我传递了一个我知道在数据库中的事件的 id 只是为了测试它

onclickeventpage()
    this.authService.displayEvent$('5ae0c8e96b40a71cd3b772cc').subscribe(event => 
      console.log(event)




  );

这让我在控制台返回了我需要的每个 aribute 事件 但是当我改变这个时

console.log(event)

为此,我可以单独获取每个属性,然后将它们放入 html

console.log(event.eventname)

我没有定义

我只想知道如何获取每个事件属性,以便我可以在我的 html 页面中显示它们

【问题讨论】:

您正在以“密钥”名称console.log(event.event.eventname) 发送所有内容。这可能应该向您表明不要发送这样的响应,而是简单地返回对象。即res.json(event),而不是你所拥有的。 另外,您使用的是旧的Http Module 吗?你应该看看使用4.3中引入的HttpClient Module 【参考方案1】:

首先你不必调用 .json() witn angular5

displayEvent$(id: string) 
    return this.http.get(`http://localhost:3000/users/event/$id`)
    .map(response => response.json());
  

你也需要访问

console.log(event.event.eventname);

【讨论】:

【参考方案2】:

HttpModule 已弃用,新的​​ HttpClientModule 默认格式化响应 JSON,因此我们不再需要使用 response.json() 解析它:

我只想知道如何获取每个事件属性,以便我可以 在我的 HTML 页面上显示它们

您可以告诉HttpClient 响应的类型,以便更轻松、更明显地使用输出。

可以使用类型参数对响应进行类型检查

 export interface Ievent 
  id:string
  eventname: string
  eventstartdate: string
  eventenddate: string
  eventcategorie: string
  eventdescription: string
  eventimage: string

    

Http 返回一个observable,我们可以告诉HttpClient.get 以Ievent 类型返回response 当我们使用http.get<Ievent>(...) 时,它返回Observable<Ievent> 类型的实例。 为您服务

     import  HttpClient  from '@angular/common/http';
     import  Observable  from 'rxjs/Observable';
        import Ievent from './eventModel'
            @Injectable()
        export class authService()
                
       constructor(private http:HttpClient)
       displayEvent$(id: string)Observable<Ievent> 

          return this.http.get<Ievent>(`http://localhost:3000/users/event/$id`);
           
          

在您的组件中订阅 Observable&lt;Ievent&gt; 以获取 Ievent 实例

   onclickeventpage()
    this.authService.displayEvent$('5ae0c8e96b40a71cd3b772cc').subscribe(event => 
      console.log(event);
      console.log(event.eventname));

【讨论】:

以上是关于以角度 5 在 HTML 上显示来自 json 对象的数据的主要内容,如果未能解决你的问题,请参考以下文章

以 JSON 格式格式化时间以在 ag-grid 中显示

根据角度 5 中的条件填充城市下拉列表

以角度解析来自 API 的 JSON 字符串

以角度 6 绑定来自服务的图像

如何以角度解析嵌套的json

根据用户输入以角度 5+ 加载动态组件