当前位置: 首页 > 知识库问答 >
问题:

angular 4.0绑定问题

燕刚毅
2023-03-14

我试图按照Angular文档中的英雄教程开始学习Angular,但当我开始改变一些事情时,出现了一些问题:

>

  • 对于我的项目,我使用Django rest框架作为后端,提供用于检索我的“书籍项目”的应用编程接口。我在这方面非常新,所以我只想知道API设置是否正确,但我不知道怎么做。

    我开始在django中实现模型,然后是序列化器、视图集,最后是网址。

    在angular中,我为http请求编写了服务组件,并编写了一个基本的html来使用此服务并显示通信是有效的。

    appcomponent.ts

    import { Component, OnInit } from '@angular/core';
    import { BookService } from './book.service';
    import { Book } from './book';
    
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css'],
      providers: [BookService],
    
    })
    export class AppComponent implements OnInit {
      title = 'app works!';
      books : Book[] = [];
      constructor(private bookService : BookService) { }
    
      getBooks(): void {
        this.bookService.getBooks().then(books => this.books = books);
      }
    
      ngOnInit(): void {
        this.getBooks();
      }
    }
    

    appcomponent.html

    html prettyprint-override"><ul class="books">
          <li *ngFor="let book of books">
            <span class="badge">{{book.isbn}}</span> {{book.title}}
          </li>
        </ul>

    >

  • book.ts

    导出类Book{id: number; title: string;}

    图书服务。ts

    从'@角/核'导入{注入;从'@角/超文本传输协议'导入{Headers, Http};导入'rxjs/add/操作员/toPromise';从'./book'导入{Book};

    @Injectable()
    export class BookService {
    
      private booksUrl = 'http://localhost:8000/api/books/';
      constructor(private http: Http) { }
    
      getBooks(): Promise<Book[]> {
        return this.http.get(this.booksUrl)
                   .toPromise()
                   .then(response => response.json().data as Book[])
                   .catch(this.handleError);
      }
      private handleError(error: any): Promise<any> {
        console.error('An error occurred', error); // for demo purposes only
        return Promise.reject(error.message || error);
      }
    
      getBook(id:number): Promise<Book>{
        const url = `${this.booksUrl}/${id}`;
        return this.http.get(url)
          .toPromise()
          .then(response => response.json().data as Book)
          .catch(this.handleError);
      }
    
      private headers = new Headers({'Content-Type': 'application/json'});
    }
    

    当我运行此代码时,我有:

    <ul _ngcontent-c0="" class="books">
          <!--bindings={}-->
        </ul>

    比如绑定不起作用。但是如果我去“网络”在Chrome,我可以看到从我的服务器检索的书籍列表

    [{isbn: "123lko12d", book_title: "Analisi2", pub_date: "2017-06-09T10:12:00Z"},…]
    0
    :
    {isbn: "123lko12d", book_title: "Analisi2", pub_date: "2017-06-09T10:12:00Z"}
    book_title
    :
    "Analisi2"
    isbn
    :
    "123lko12d"
    pub_date
    :
    "2017-06-09T10:12:00Z"
    1
    :
    {isbn: "isijh12432", book_title: "Fisica1", pub_date: "2017-05-17T16:11:02Z"}
    book_title
    :
    "Fisica1"
    isbn
    :
    "isijh12432"
    pub_date
    :
    "2017-05-17T16:11:02Z"
    

    我真的不知道我做错了什么。。。谢谢你抽出时间,很抱歉我的英语不好

    更新:控制台中现在显示此行:

    (2) [Object,Object] book.service.ts
    
    0:Object
    book_title
    :
    "Analisi2"
    isbn
    :
    "123lko12d"
    pub_date
    :
    "2017-06-09T10:12:00Z"
    
    1:Object
    book_title
    :
    "Fisica1"
    isbn
    :
    "isijh12432"
    pub_date
    :
    "2017-05-17T16:11:02Z"
    
  • 共有1个答案

    酆高翰
    2023-03-14

    在您的服务中,在getBooks函数中,尝试以下操作:

    getBooks(): Promise<Book[]> {
        return this.http.get(this.booksUrl)
               .toPromise()
               .then(response =>{
                    console.log(response.json());
                    return response.json() as Book[];
               })
               .catch(this.handleError);
    }
    

    请把日志放在你的问题上。我认为的问题是,您使用data,但您的响应中可能没有它(例如,在我当前的项目中,我们将其设置为Content

     类似资料:
    • 问题内容: 我正在尝试进入instagram页面,但没有运气。我不断收到错误和空白的屏幕截图。 错误文字: Casperjs –version是1.1.0-beta3。 基本上,我使用以下代码: 问题答案: 如果使用了PhantomJS 2,则不再需要下面的垫片。不幸的是,CasperJS1.1-beta3还不支持它,因此您可能想要使用GitHub的master分支。 问题是PhantomJSv1

    • Spring Boot属性解析程序面临一个奇怪的问题。 正在尝试为其中一个属性执行简单的@Value。在调试日志中,我看到该属性已匹配,但稍后报告为找不到几行。知道怎么回事吗? Java代码: 记录在下面

    • 问题内容: 我目前正在将一个大型应用程序移植到基于HTML5的Web应用程序上-我已经开始在AngularJS中构建该应用程序并享受AngularJS框架的功能- 目前,我遇到了一个问题: 我有一个给我jQuery Datepicker的指令,但是对模型的绑定似乎不起作用。 http://jsfiddle.net/9BRNf/ 我可能会误解指令的工作方式,并想了解我是否可以修补对框架的这一部分理解

    • 我尝试将属性和一些数据绑定到模板,但下面的代码不起作用。我需要的是呈现n个模板的数量取决于printedForms对象的数量,并在每个模板中实现来自适当对象的数据。请告诉我我的代码有什么问题。 注意:控制台中有如下警告:[Vue warn]:计算表达式“printedForm.docNumber”时出错:TypeError:无法读取未定义(在组件中找到)的属性“docNumber”) 我的VueJ

    • 我有一个ListView,并设置了ItemContainerStyle,但我仍然遇到同样的问题。请帮忙

    • vue3 div 绑定 ref 正常是这样的: 这样的怎么不可以: