角度2@输入数据未正确绑定 父模块: 模块html: 组成部分: 从'@angular/core'导入{Component,Input,Output,EventEmitter}; 导出类下拉值{ 值:字符串; 标签:字符串; 构造函数(值:字符串,标签:字符串){ 这个值=值; this.label=标签; } } @组成部分({ 选择器:“下拉列表”, 模板:` {{item.label} `, }) 导出类下拉组件{ selectedValue:DropdownValue=新的DropdownValue('2',''); @输入() 项目:下拉值[]; @输入() 值:字符串[]; @输出() valueChange:EventEmitter=新的EventEmitter(); onChange(事件:任何){ 日志(event.target.value); this.valueChange.emit(event.target.value); } }

角度2@输入数据未正确绑定 父模块: 模块html: 组成部分: 从'@angular/core'导入{Component,Input,Output,EventEmitter}; 导出类下拉值{ 值:字符串; 标签:字符串; 构造函数(值:字符串,标签:字符串){ 这个值=值; this.label=标签; } } @组成部分({ 选择器:“下拉列表”, 模板:` {{item.label} `, }) 导出类下拉组件{ selectedValue:DropdownValue=新的DropdownValue('2',''); @输入() 项目:下拉值[]; @输入() 值:字符串[]; @输出() valueChange:EventEmitter=新的EventEmitter(); onChange(事件:任何){ 日志(event.target.value); this.valueChange.emit(event.target.value); } },angular,typescript,dropdown,Angular,Typescript,Dropdown,如果我在组件中设置了测试数据并删除了数据绑定,它就会工作。 我甚至尝试了一些简单的方法,比如@input items:string,并在模板中将其设置为纯文本。还没有定义 我遗漏了什么?我看了一些例子,看不出有什么不同。 您是否需要在模块中导入特定的内容以使数据绑定工作?看起来我实际上必须在import{HeaderComponent}from./header.component'中为数据绑定设置值本身,而不是导入它的模块。您缺少一些可能与其他导入共享的重要模块,例如 import {Share

如果我在组件中设置了测试数据并删除了数据绑定,它就会工作。
我甚至尝试了一些简单的方法,比如
@input items:string
,并在模板中将其设置为纯文本。还没有定义

我遗漏了什么?我看了一些例子,看不出有什么不同。

您是否需要在模块中导入特定的内容以使数据绑定工作?

看起来我实际上必须在
import{HeaderComponent}from./header.component'中为数据绑定设置值本身,而不是导入它的模块。

您缺少一些可能与其他导入共享的重要模块,例如

import {SharedModule} from "./app/shared/shared.module.ts";

您可以看到
下拉列表中的组件。

首先您需要添加:

items:DropdownValue[]=[
{值:'1',标签:'test 1'},
{值:“2”,标签:“测试2”}
];

在另一个组件中,例如:xyz,并将其导入到您的模块中。 比


这里[项目]。。。必须是您在组件类中用@Input提到的目标属性名称,=“items”应该是您在xyz组件类中提到的属性名称…

到底什么不起作用
@Input()
s值在
constructor
中尚不可用,仅在
ngOnInit
中可用。我还认为标记在组件模板中?它可能是我不知道的东西,但我从来没有见过在模块中使用输入之类的东西。组件是我经常使用它们的地方。按照在OP中的布局方式,看起来您在模块中完成了所有工作。绑定值未定义。如果我用一些值初始化组件中的项目,它们也会被未定义的覆盖。更新为完整代码。同样,你是指组件html(不是模块)?另外:您可以直接从模块导出看起来像是服务的内容。如果您打算将其用作服务,则需要“提供”它,然后将其注入到组件中并以这种方式使用(作为服务)。至少,我总是这样完成工作的。
<div class="navbar dark-bg remove-bottom-margin flex-container">
    <search></search>
    <div class="flex-item">
        <dropdown [items] = "items"></dropdown>
    </div>
    <userinfo></userinfo>
</div>
import { Component, Input, Output, EventEmitter } from '@angular/core';

export class DropdownValue {
  value: string;
  label: string;

  constructor(value: string, label: string) {
    this.value = value;
    this.label = label;
  }
}

@Component({
  selector: 'dropdown',
  template:  `
    <select class="form-control" [(ngModel)]="selectedValue.value" (change)="onChange($event)">
      <option *ngFor="let item of items" [value]=item.value>{{item.label}}</option>
    </select>
  `,
})

export class DropdownComponent {
  selectedValue: DropdownValue = new DropdownValue('2', '');

  @Input()
  items: DropdownValue[];

  @Input()
  value: string[];

  @Output()
  valueChange: EventEmitter<any> = new EventEmitter();

  onChange(event: any) {
    console.log(event.target.value);
    this.valueChange.emit(event.target.value);
  }
}
import {SharedModule} from "./app/shared/shared.module.ts";