【问题标题】:Binding data to angular 2 route components将数据绑定到 Angular 2 路由组件
【发布时间】:2016-01-19 19:27:51
【问题描述】:

我现在有以下模板

<project-form [nextId]="projects.length" (newProject)="addProject($event)"></project-form>
<project-list [projects]="projects"></project-list>

在 ProjectAppComponent 内部。

class ProjectAppComponent {
    projects: Project[] = [
        { id: 0, title: "Build the issue tracker" },
        { id: 1, title: "Basecamp" },
    ]

    addProject(project: Project) {
        this.projects.push(project);
    } 
}

ProjectAppComponent 具有项目数组和将新项目推入其中的方法。我想为项目表单和项目列表创建子路由,这样我就可以使用/projects/new/projects/show 来显示表单或列表。我创建了这样的路线配置 -

@Component({
    template: `
        <div>
            <router-outlet></router-outlet>
        </div>
    `,
    directives: [ RouterOutlet ]
})
@RouteConfig([
    { path: '/list', name: 'ProjectList', component: ProjectListComponent, useAsDefault: true },
    { path: '/new', name: 'ProjectForm', component: ProjectFormComponent },
])
class ProjectAppComponent {
    projects: Project[] = [
        { id: 0, title: "Build the issue tracker" },
        { id: 1, title: "Basecamp" },
    ]

    addProject(project: Project) {
        this.projects.push(project);
    } 
}

对于 ProjectAppComponent 类本身。现在的问题是我不知道如何将项目数组(模板中的[projects]="projects")传递给ProjectListComponent,因为不再使用&lt;project-list&gt; 选择器(必须使用&lt;router-outlet&gt;)。 ProjectListComponent 依赖@Input() project: Project 来渲染所有项目。我应该如何解决这个问题?这是项目列表组件 -

@Component({
    selector: 'project-list',
    template: `
        <ul>
            <project-component *ngFor="#project of projects" [project]="project"></project-component>
        </ul>
    `,
    directives: [ProjectComponent]
})
class ProjectListComponent {
    @Input() projects: Project[];
}

【问题讨论】:

    标签: angular angular2-routing


    【解决方案1】:

    你不能只使用服务吗?

    import {Injectable} from 'angular2/core';
    import {Project} from '...';
    
    
    @Injectable()
    export class ProjectService {
      public projects: Project[] = [
        { id: 0, title: "Build the issue tracker" },
        { id: 1, title: "Basecamp" },
      ];
    
      addProject(...args): number {
        return this.projects.push(new Project(...args));
      }
    }
    

    【讨论】:

    • 如何将表单中的@Output() EventEmitter 绑定到 ProjectService?
    • @lightning 您可以在表单组件中发出值并在 ProjectAppComponent 中订阅
    • kk。我会试一试。
    • 老实说,如果你可以在表单组件中注入服务并以这种方式推送数组,你为什么还需要事件发射器?
    猜你喜欢
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 2017-06-05
    • 2017-11-05
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多