无法在Angular 4中显示单个JSON对象属性

时间:2018-01-25 23:46:45

标签: javascript html json angular

请,我需要帮助来显示单个JSON对象属性。

这是我的服务:

<!DOCTYPE html>
<html>
<head>
  <title>Contact</title>
  <link href="https://fonts.googleapis.com/css?family=Quicksand" rel="stylesheet">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
  <link rel="stylesheet" type="text/css" href="contact.css">
  <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">



    </head>
    <body>

      <!--navbar-->   
      <nav class="navbar navbar-expand-sm navbar-dark bg-dark">
        <a class="navbar-brand" href="home.html"><img class="avatar" src="images/Originals/avatar.jpg" alt>Munoz Designs</a>

        <!--Toggle Button-->
        <button class="navbar-toggler" type="button" data-toggle="collapse"data-target="#navbarResponsive"aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
          <span class="navbar-toggler-icon"></span></button>

          <!--Navbar links-->
          <div class="collapse navbar-collapse" id="navbarResponsive">
            <ul class="navbar-nav ml-auto">
              <li class="nav-item">
                <li class="nav-item">
                  <a class="nav-link"
                  href="about.html">About</a>
                </li>
                <li class="nav-item">
                  <a class="nav-link"
                  href="gallery.html">Gallery</a>
                </li>

                <!--Social Media Icons-->
                <li class="nav-item">
                  <a class="nav-link" href="https://www.instagram.com/eddiearkmunoz/" title="Follow on Instagram" target="_blank"><i class="fa fa-instagram" aria-hidden="true"></i></a>

                  <li class="nav-item">
                    <a class="nav-link" href="https://www.linkedin.com/in/eddie-munoz-351a9428/" title="Follow on Linkedin" target="_blank"><i class="fa fa-linkedin-square" aria-hidden="true"></i></a>

                    <li class="nav-item">
                      <a class="nav-link" href="https://twitter.com/arkadiusart" title="Follow on Twitter" target="_blank"><i class="fa fa-twitter" aria-hidden="true"></i></a>

                      <li class="nav-item">
                        <a class="nav-link" href="https://eddiemunoz.deviantart.com/gallery/" title="Follow on Deviant Art" target="_blank"><i class="fa fa-deviantart" aria-hidden="true"></i></a>

                        <li class="nav-item">
                          <a class="nav-link" href="https://www.artstation.com/ed209" title="Follow on ArtStation" target="_blank"><i class="fa fa-paint-brush" aria-hidden="true"></i></a>

                          <li class="nav-item">
                            <a class="nav-link" title="Email">
                              <i class="fa fa-envelope-o" aria-hidden="true"></i></a>
                            </ul>
                          </div>
                        </div>
                      </nav>

                      <div class="intro">
                        <h1>Contact</h1>
                        <h4>If you would like to work with me, send me a message!</h4>
                      </div>

                      <!--Contact-->

                      <div class="container">
                        <div class="row">
                          <div class="col-md-12">
                            <div class="well well-sm">
                              <form class="form-horizontal" method="post">
                                <fieldset>

                                  <div class="form-group">
                                    <div class="col-md-8">
                                      <div class="input-wrapper">
                                        <input id="fname" name="name" placeholder="Name" type="text" class="form-control">
                                        <label for="fname" class="fa fa-user input-icon bigicon"></label>
                                      </div>
                                    </div>
                                  </div>

                                  <div class="form-group">
                                    <div class="col-md-8">
                                      <div class="input-wrapper">
                                        <input id="email" name="email" type="text" placeholder="Email" class="form-control">
                                        <label for="email" class="fa fa-envelope-o input-icon bigicon"></label>
                                      </div>
                                    </div>
                                  </div>

                                  <div class="form-group">
                                    <div class="col-md-8">
                                      <div class="input-wrapper">
                                        <textarea class="form-control" id="message" name="message" placeholder="Message" rows="3"></textarea>
                                        <label for="message" class="fa fa-pencil input-icon bigicon"></label>
                                      </div>
                                    </div>
                                  </div>

                                  <div class="form-group">
                                    <div class="col-md-12 text-center">
                                      <button type="submit" class="btn btn-outline-secondary btn-md">Submit</button>
                                    </div>
                                  </div>
                                </fieldset>
                              </form>
                            </div>
                          </div>
                        </div>
                      </div>


                      <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
                      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
                    </body>
                    </html>
  html{
  box-sizing: border-box;}
  *,
  *: before, 
  *: after {
    box-sizing: inherit;
    padding: 0;
    margin: 0;
  }
  body{background-image: url();
   width: 100%;
  height: 100%;
  background-position: bottom center;
  background-repeat: no-repeat;
  background-attachment: fixed;
  background-size: cover;
  background-color: #464646;
  font-family:"Quicksand";
  font-size: 1.2em;
  line-height: 1.375em;
  padding: 0;
  margin: 0;
  background-color: #2F3A3B;
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;

  }

 navbar-brand{

    height: 3em;
    width: 3em;
    margin-top: -8px;
    border-radius: 5.0em;
    margin-right: 1em;
    margin-left: -5em;
    margin-bottom: -8px
}

.avatar{
border-radius: 5em;
margin-right: .5em;
margin-left: 1em;

}
  .intro{
    display: inline-block;
    width: 100%;
    padding: 65px 0 65px;
    background-color: #2A2332;
    background-size: cover;
    font-size: 1.9em;
    text-align: center;
    color: #FFF;
  }

   h1{
    font-weight: medium;
    text-shadow:5px 5px 10px black;
  }

  h4{
    font-size: -.5em;
  }


.row{
  margin-right: 4em;
  margin-left: 4em;
  margin-top: .10em;
  padding-bottom: -.30em;

}

.container {
  margin-left: 17em;
  padding-top: 1.5em;

}

.bigicon {
  font-size: 35px;
  color: #808080;

}

.input-icon {
  position: absolute;
  left: .5rem;
  top: .7rem;

  /* Keep icon in center of input, regardless of the input height */
}


#message {
  vertical-align: middle;
}
input {

  padding-right:30px;

}

.form-control {
  text-indent: 2rem;
  width: 75%;




}

.input-wrapper {
  position: relative;


}

.btn{

  margin-right: 10em;

}


  @media screen and (min-width: 640px){


  }

  @media screen and (min-width: 960px){

  }

  main {flex: 1;}

我的component.ts文件:

    import {  
    Injectable  
} from '@angular/core';  
import {  
    Http,  
    HttpModule,
    Headers,  
    RequestOptions,  
    Response  
} from '@angular/http'; 
import { HttpClientModule } from '@angular/common/http'; 
import {  
    Observable 

} from 'rxjs/Rx';  
import 'rxjs/Rx'; //get everything from Rx    
import 'rxjs/add/operator/toPromise';  
import {  
    IProduct  
} from "../models/iproduct"; 
@Injectable()  
export class ProcessJsonService {  
    constructor(private http: Http) {}  
    //    
    getProcesslist() {  
        return this.http.request('http://www.json-generator.com/api/json/get/bVOdrzTUeq?indent=0')
   .map(res => { console.log("I SEE DATA HERE: ", res.json())
       return res.json(); })

        }

    }  

我的HTML代码:

    import { Component, OnInit } from '@angular/core';
import { IProduct } from "../models/iproduct";
import {  
  Http  
} from '@angular/http';   
import {  
  ProcessJsonService  
} from '../models/myjsonprocess';  
import {  
  Observable  
} from 'rxjs/Rx'; 
@Component({
  selector: 'app-product-list',
  templateUrl: './product-list.component.html',
  styleUrls: ['./product-list.component.css']
})
export class ProductListComponent implements OnInit {

  pageTitle: string = 'Process List';
  imageWidth: number = 50;
  imageMargin: number = 2;
  showImage: boolean = false;
  listFilter: string = '';
  processList: IProduct[];  
  errorMessage: string;

  constructor(private _processJsonService: ProcessJsonService) {  
    this.processList = []; 
  }

  ngOnInit(): void {  
        this._processJsonService.getProcesslist()
        .subscribe(
        processList => this.processList = processList)
    } 
}

问题是我没有在浏览器上显示我的数据,但是如果URL包含JSON数组,则数据会显示在浏览器中。

我在服务中添加了一个console.log来显示控制台中的res.json,我得到了它。我在组件中尝试了相同的(在ngOnInit中),但我没有在控制台中获取数据。这可能有助于找出问题所在。

请帮忙吗?

1 个答案:

答案 0 :(得分:1)

您是说getProcessList()可以返回[{...}, {...}, {...}]和(如果只有一个流程)这样的内容会返回{...}吗?

如果是这种情况,则ngFor不会喜欢收到不是列表的内容,所以:

ngOnInit(): void {  
        this._processJsonService.getProcesslist()
        .subscribe(processList => {
            if (processList instanceof Array) {
                this.processList = processList;
            } else {
                this.processList = [processList];
            }
        });
}