2016-07-29 60 views
0

我是一个angular2新手,我有一个关于从模板中获取数据的问题。我有以下的模板:从模板获取数据返回到组件

<h2>Set parameters</h2> 
<button (click)="onClick()">Calculate</button> 
<h3>Sailing profiles</h3> 
<label *ngFor="let sailingProfile of sailingProfiles"> 
    <input type="checkbox" name="{{sailingProfile.title}}" value="{{sailingProfile.title}}"> 
    {{sailingProfile.title}}<br> 
</label> 
<h3>Counters</h3> 
<label *ngFor="let counter of counters"> 
    <input type="checkbox" name="{{counter.type}}" value="{{counter.type}}"> 
    <input type="text"> {{counter.type}}<br> 
</label> 

的目的是选择一个或多个帆船轮廓,并选择一个或多个计数器,并提供每个选定的计数器添加值。使用这个模板的组成部分是:

import {Component, EventEmitter, Output} from "@angular/core"; 
import {CounterService} from "../service/counter.service"; 
import {SailingProfileService} from "../service/sailing-profile.service"; 
import {CounterModel} from "../model/counter"; 
import {SailingProfileModel} from "../model/sailing-profile"; 

@Component({ 
    selector: 'params', 
    templateUrl: '../../template/params.html', 
    providers: [CounterService, SailingProfileService], 
}) 
export class ParamsComponent { 
    @Output() paramsUpdated: EventEmitter<string> = new EventEmitter<string>(); 

    counters: CounterModel[] = []; 
    sailingProfiles: SailingProfileModel[] = []; 

    constructor(private counterService: CounterService, private sailingProfileService: SailingProfileService) { 
    } 

    ngOnInit() { 
     this.counterService.getCounters().subscribe(c => this.counters = c); 
     this.sailingProfileService.getSailingProfiles().subscribe(s => this.sailingProfiles = s); 
    } 

    onClick() { 
     this.paramsUpdated.emit('test'); 
    } 
} 

我如何选择帆船轮廓和计数器以及它们的值回在onclick()方法?期望的结果是一个字符串,它看起来像这样:

{"counters":[{"type":"Running hours","value":6000},{"type":"Seconds","value":31536000}],"sailing_profiles":[{"title": "Continuous sailing"}]} 

回答

1

使用[(ngModel)]而不是value

它会是这个样子

<label *ngFor="let sailingProfile of sailingProfiles"> 
    <input type="checkbox" name="{{sailingProfile.title}}" [(ngModel)]='sailingProfile.checkBoxState'> 
    {{sailingProfile.title}}<br> 
</label> 
<h3>Counters</h3> 
<label *ngFor="let counter of counters"> 
    <input type="checkbox" name="{{counter.type}}" [(ngModel)]='counter.checkBoxState'> 
    <input type="text"> {{counter.type}}<br> 
</label> 

现在,当您访问this.counterthis.sailingProfilesonClick,您会看到每个选中的复选框都有checkBoxState : true。它应该看起来像

this.counters = [ 
    {"type":"Running hours","value":6000}, 
    {"type":"Seconds","value":31536000, checkBoxState: true} 
]; 

this.sailingProfiles = [ 
    {"title": "Continuous sailing", checkBoxState: true} 
] 

现在您可以获取所选对象的值。

相关问题