【问题标题】:Angular 2: *ngFor list of directivesAngular 2:*ngFor 指令列表
【发布时间】:2016-02-18 15:57:26
【问题描述】:

我有一个队列,它本身有一个人员数组。在队列中,我想显示人员模板中定义的每个人员。

queue.ts

import {Component} from 'angular2/core';
import {Person} from '../person/person';
@Component({
    selector: 'queue',
    directives: [Person],
    template: `<div class="queue">
        <person *ngFor="#tP of people"></person>
    </div>`
})
export class Queue {
    people = [];
    constructor(){
        this.addPerson(new Person("Bob",20));
        this.addPerson(new Person("Jane",30));
        this.addPerson(new Person("Dog",40));
        this.addPerson(new Person("Cat",50));

    };
    addPerson(tP:Person):void
    {
        this.people.push(tP);
    }
}

person.ts

import {Component} from 'angular2/core';

@Component({
    selector: 'person',
    template: `<div class="person">
        <div class="name">{{name}}</div>
        <div class="age">{{age}}</div>
    </div>`
})
export class Person {
    constructor(public name:string = "", public age:number = 5){};
    setName(newName:string):void{
        this.name = newName;
    }
}

我的希望

<div class="queue">
<div class="person"><div class="name">Bob</div><div class="age">20</div></div>
<div class="person"><div class="name">Jane</div><div class="age">30</div></div>
<div class="person"><div class="name">Dog</div><div class="age">40</div></div>
<div class="person"><div class="name">Cat</div><div class="age">50</div></div>
</div>

我得到了什么

例外:没有字符串的提供者! (Person -> String) in [队列中的人员@1:16]

总结

我想使用指令本身定义的模板呈现指令列表。

【问题讨论】:

    标签: angularjs angular angular2-directives


    【解决方案1】:
    <person *ngFor="let tP of people"></person>
    

    已经为people 中的每个项目创建了一个新人。相反,您应该只将数据添加到people = [];,然后使用绑定将数据传递到组件中。

    constructor(){
        this.addPerson({name: "Bob", age: 20});
        this.addPerson({name: "Jane", age: 30});
        this.addPerson({name: "Dog", age: 40});
        this.addPerson({name: "Cat", age: 50});
    
    };
    
    <person *ngFor="let tP of people" [name]="tp.name" [age]="tp.age"></person>
    
    export class Person {
      @Input() name:string;
      @Input() age:number;
    
      ngOnInit() {
        console.log('name: ' + this.name + ', age: ' + this.age);
      }
    }
    

    您通常不会自己创建组件的实例,而是指示 Angular 为您创建。

    如果组件有构造函数参数,Angular 会在提供者列表中查找它们并自己创建实例以将它们传递给构造函数。您的错误消息由此产生,因为 Angular 没有string 的提供程序。 (constructor(public name:string = "",)

    【讨论】:

    • 您好,感谢您的详细回复。因此,使用此解决方案,父队列有一个对象数组而不是 Person 的数组,然后必须将所有必需的属性显式传递给它通过 *ngFor? 创建的 。如果这是唯一的方法,那很好,(我不想减损你的帮助)但对我来说这似乎有很多重复,它依赖于父母知道孩子需要呈现什么。理想情况下,我希望父母对孩子说“Oi,渲染自己!”其余的由孩子完成,因为所有细节都已设置。
    • 关于字符串提供程序问题,据我了解,我应该能够在构造函数中传递一个字符串,如此处所示 - egghead.io/lessons/angular-2-adding-a-data-model - 在大约 1 分钟标记处
    • 这是一个模型类,不是由 Angular 管理的。该类用作数据的简单容器,而不是组件,甚至不是服务,仅由您编写的代码实例化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2018-01-17
    • 2017-09-20
    • 1970-01-01
    • 2018-11-09
    • 2018-06-05
    • 2023-03-27
    相关资源
    最近更新 更多