【问题标题】:Angular 2 passing object to componentAngular 2将对象传递给组件
【发布时间】:2016-05-09 15:16:18
【问题描述】:

我正在尝试将一个对象传递给另一个组件。

请求列表.html

<tr [routerLink]="['Request', { id: request.id }]" *ngFor="let request of requests" [req]="request">
                        <td class=" ">{{ request.datum }}</td>
                        <td class=" ">{{ request.artist.name }} </td>
                        <td class=" ">{{ request.artist.user.first_name }}
                        <td class=" ">{{ request.user.first_name }}</td>
                        <td class=" ">{{ request.duration.price }}</td>
                        <td class=" ">{{ request.created_at }}</td>
                        <td class=" ">{{ request.rejected_at }}</td>
                    </tr>

请求列表组件

import {Component} from '@angular/core';
import {Service} from './../services/service.service';
import {Request} from './../classes/request';
import {RouteConfig, ROUTER_DIRECTIVES} from '@angular/router-deprecated';
import {RequestComponent} from './request.component';

@Component({
  directives: [ROUTER_DIRECTIVES, RequestComponent],
  templateUrl: 'partials/request-list.html'
})

export class RequestListComponent {
  requests: Request[];
  constructor(private _Service: Service) {}

  ngOnInit(){
    this._Service.getRequests().subscribe(data => this.requests = data);
  }
}

请求组件

import {Component, Input} from '@angular/core';
import {Service} from './../services/service.service';
import {Request} from './../classes/request';


@Component({
  templateUrl: 'partials/request.html'
})

export class RequestComponent {
  @Input() req: Request;

  constructor(private _Service: Service) {}
}

但是我收到错误:“无法绑定到 'req',因为它不是已知的本机属性”

我做错了什么?

【问题讨论】:

  • RequestComponent的选择器是什么?
  • 问题是,RequestComponent 是与路由器一起加载的,而不是在RequestListComponent 内。因此,您不能使用@Input() 将数据传递到RequestComponent

标签: input typescript angular


【解决方案1】:

正如我在评论中提到的,如果您的RequestComponent 加载了Router,您将无法使用@Input()。不幸的是,不能使用 RouteLink-Directive 传递 RouteData

为了解决这个问题,我会从服务中加载RequestComponent 中的Request,您使用它来加载Requests 的列表。为了减少到后端的流量,如果你有的话,你可以建立一些缓存机制。

export class RequestComponent {
    req: Request;

    constructor(private _Service: Service, routeParams : RouteParams) {
        this.req = _Service.getRequestById(routeParams.get('id'));
    }
}

【讨论】:

  • 啊,谢谢!将对此进行调查。已经有一个服务可以通过后端处理 http 请求。我应该使用那个,还是为请求创建新服务是最佳做法?
  • @Ruben 这要看你的服务,没有代码很难说。
  • 好的,是的,我在我们知道的服务中实现了它。与其他人一起工作,我们将讨论什么对我们最有利。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
  • 2017-08-30
  • 2017-06-15
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多