【问题标题】:Angular2 RC1 Parent to Child data through Input Binding通过输入绑定的Angular2 RC1父子数据
【发布时间】:2016-05-12 18:35:10
【问题描述】:

所以我在升级到 RC1 后遇到了输入绑定问题。这是我的观点:

<form class="form-inline">
    <div class="form-group">
        <select id="limitControl" class="form-control" 
                [(ngModel)]="limit" (change)="limitChanged($event)">
            <option value="5">5</option>
            <option value="10">10</option>
            <option value="25">25</option>
            <option value="0">All</option>
        </select>
        <label for="limitControl"> {{recordType}} per page</label>
    </div>
</form>

这是以下组件的视图:

@Component({
    selector: 'limiter',
    templateUrl: 'frontend/common/limiter/view.html',
    styleUrls: ['frontend/common/limiter/style.css']
})

export class LimiterComponent {
    limit: number = 10;

    @Input() recordType: string;
    @Output() limitChangedEvent = new EventEmitter<number>();

    limitChanged($event) {
        this.limitChangedEvent.emit($event.currentTarget.value);
    }
}

最后,这是由它的父级调用的:

<limiter (limitChangedEvent)="limitChanged($event)" 
         [recordType]="Campaigns"></limiter>

recordType 似乎没有传递到子组件中。有人有什么想法吗?

【问题讨论】:

  • 您的 view.html 中是否缺少结束 &lt;/form&gt; 标记?
  • 它没有被 SO 缩进和吞噬
  • 我看不到错误。也许问题在于Campaigns 的设置方式。
  • 父组件长什么样子?

标签: typescript angular angular2-template


【解决方案1】:

你可以这样试试吗:

export class LimiterComponent {
        limit: number = 10;

        @Input('record-type') recordType: string;
        @Output() limitChangedEvent = new EventEmitter<number>();

        limitChanged($event) {
            this.limitChangedEvent.emit($event.currentTarget.value);
        }
    }

父组件:

<limiter (limitChangedEvent)="limitChanged($event)" 
         record-type="Campaigns"></limiter>

【讨论】:

  • 你是对的!!除了在父组件中,您删除括号。所以:&lt;limiter (limitChangedEvent)="limitChanged($event)" record-type="Campaigns"&gt;&lt;/limiter&gt;
【解决方案2】:

我认为这个问题与命名约定有关。查看Input 文档here,请注意您使用camelCasing 进行DOM 绑定——而文档显示了使用连字符代替?

不是这个

<limiter (limitChangedEvent)="limitChanged($event)" 
         [recordType]="Campaigns"></limiter>

试试这个

<limiter (limitChangedEvent)="limitChanged($event)" 
         record-type="Campaigns"></limiter>

【讨论】:

  • Angular 不需要。
  • Rhey 可能会在“某处”使用它,但模板在很长一段时间以来都是区分大小写的,recordType 是类和模板中的有效输入和输出名称。
猜你喜欢
  • 1970-01-01
  • 2017-03-23
  • 2016-09-08
  • 2017-05-17
  • 2017-01-13
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 2017-10-19
相关资源
最近更新 更多