【问题标题】:Angular model data from parent Controller来自父控制器的角度模型数据
【发布时间】:2018-03-15 09:23:54
【问题描述】:

我有一个控制器,在它的模板中我将数据传递给孩子:

    <app-lexema-item [lexema]="lexema"></app-lexema-item>

子控制器是:

@Component({
  selector: 'app-lexema-item',
  templateUrl: './lexema-item.component.html',
  styleUrls: ['./lexema-item.component.css']
})
export class LexemaItemComponent implements OnInit {
  @Input() lexema: Lexema;
  constructor() {}
  ngOnInit() {}
}

及其模板:

<div class="container">
  <div class="row">
    <div class="col-xs-10">
      <p>
        <br/> {{ lexema.name }} ({{ lexema.type }})
      </p>
    </div>
  </div>
</div>

数据正确传递并注入子控制器。

问题

下一步我尝试为lexema-item.component.html添加输入:

    <input type="text" ngModel name="lexema.name">

但它不起作用。我知道问题在于在名称字段中使用lexema.name,但我不知道如何处理它(我尝试了其他不同的情况name=[(lexema.name)]name="[(lexema.name)]")但没有成功。

有什么酷炫优雅的解决方案吗?

【问题讨论】:

  • 控制台有错误吗?
  • 控制台没有错误

标签: angular typescript data-binding


【解决方案1】:

您应该使用[(ngModel)] 而不是name=[(lexema.name)]。提示:如果您在控制台中遇到未定义的错误,请将[(ngModel)]="lexema.name" 挂到[(ngModel)]="lexema?.name"

改变这个:

 <input type="text" ngModel name="lexema.name">

到这里:

 <input type="text" [(ngModel)]="lexema.name" name="name">

通过使用[(ngModel)],您必须使用name-attribute,因为它对于模板驱动的表单很重要。您还应该将FormsModule 导入到您的 app.module.ts 中。

import { FormsModule } from '@angular/forms';

有关更多信息,请阅读有关 template driven forms 的官方 Angular 文档。

【讨论】:

  • Template parse errors: Can't bind to 'ngModel' since it isn't a known property of 'input'. (" &lt;div class="col-xs-10"&gt; &lt;p&gt; &lt;input type="text" [ERROR -&gt;][(ngModel)]="lexema.name" name="name"&gt;
  • 将 FormsModule 导入 app.module.ts
【解决方案2】:

首先你会得到一个未定义元素的错误,因为输入绑定将在标记初始化之后进行。因此,首先我们需要确保在分配输入时我们的元素是可见的。

如果要绑定到name 属性。

<input type="text" ngModel name="{{ lexema?.name }}">

如果你想绑定到input的值,你需要使用ngModel双向绑定

<input type="text" [(ngModel)]="lexema?.name">

【讨论】:

  • ngModel name="{{ lexema?.name }}" - 已编译但不起作用。 &lt;input type="text" [(ngModel)]="lexema?.name"&gt; 出现编译错误 (Template parse errors: Parser Error: The '?.' operator cannot be used in the assignment at column 14 in [lexema?.name=$event] in ng:///AppModule/LexemaItemComponent.html@4:29 (" &lt;div class="col-xs-10"&gt; &lt;p&gt; &lt;input type="text" [ERROR -&gt;][(ngModel)]="lexema?.name" name="name"&gt;)
  • 改成&lt;input *ngIf="lexema" type="text" [(ngModel)]="lexema.name"&gt;
  • Template parse errors: Can't bind to 'ngModel' since it isn't a known property of 'input'. (" &lt;div class="col-xs-10"&gt; &lt;p&gt; &lt;input *ngIf="lexema" type="text" [ERROR -&gt;][(ngModel)]="lexema.name"&gt; &lt;br/&gt;...
  • 在模块中导入FormsModule
猜你喜欢
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 2015-03-12
  • 1970-01-01
  • 2017-10-10
  • 2015-03-05
  • 2013-07-28
相关资源
最近更新 更多