首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有@ ngModel值的ngModel

具有@ ngModel值的ngModel
EN

Stack Overflow用户
提问于 2017-04-21 12:23:11
回答 3查看 8K关注 0票数 5

我试图在我的子组件中使用(ngModel),通过@ via ()将一个字符串从我的父组件传递到我的子组件。

然而,双向绑定似乎不起作用。正确地从父字符串传入字符串,但当我在子字符串中编辑它时,父字符串的值不会被更新。

我遗漏了什么?

父级:

代码语言:javascript
复制
@Component({
  selector: 'my-app',
  template: `
    <div>
      <child [(value)]="name"></child>
      <p>{{name}}</p>
    </div>
  `,
})
export class App {
  name:string = 'MyValue';
  constructor() {

  }
}

孩子

代码语言:javascript
复制
import {Component, Input} from '@angular/core'

@Component({
  selector: 'child',
  template: `
    <div>
    <p>My custom input</p>
      <textarea [(ngModel)]="value"></textarea>
    </div>
  `,
})
export class Child {


  @Input() value:string;

  constructor() {

  }
}

我创建了一个plnkr,说明了这个问题:https://plnkr.co/edit/jCF5kt73P38EFYUAZF6l

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-21 12:26:13

您需要一个输出来通知更改:

代码语言:javascript
复制
import {Component, Input} from '@angular/core'

@Component({
  selector: 'child',
  template: `
    <div>
    <p>My custom input</p>
      <textarea [(ngModel)]="value" (ngModelChange)="update($event)"></textarea>
    </div>
  `,
})
export class Child {


  @Input() value:string;
  @Output() valueChange:EventEmitter<string> = new EventEmitter<String>()

  update(value) {
    this.valueChange.emit(value);
  }

  constructor() {

  }
}
票数 6
EN

Stack Overflow用户

发布于 2017-04-21 12:46:09

是的-@输入只有一种方式。当父级更改输入的值时,会通知子节点。但是,如果您只使用@Input,则父程序不知道子程序是否有任何更改。

票数 1
EN

Stack Overflow用户

发布于 2017-04-21 12:48:37

为了继续@Günter Z chbauer的回答,我也修改了app.ts文件。

app.ts:

代码语言:javascript
复制
//our root app component
import {Component, NgModule, VERSION} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import {Child} from './child'
import {FormsModule} from "@angular/forms";

@Component({
  selector: 'my-app',
  template: `
    <div>
      <child [value]="name" (valueChange)= "updateValue($event)"></child>
      <p>{{name}}</p>
    </div>
  `,
})
export class App {
  name:string = 'MyValue';
  constructor() {

  }
   updateValue(value){
      this.name = value;
    }
}

@NgModule({
  imports: [ BrowserModule, FormsModule ],
  declarations: [ App, Child ],
  bootstrap: [ App ]
})
export class AppModule {}

孩子

代码语言:javascript
复制
import {Component, Input, Output, EventEmitter} from '@angular/core'

@Component({
  selector: 'child',
  template: `
    <div>
    <p>My custom input</p>
      <textarea [(ngModel)]="value" (ngModelChange)="update($event)"></textarea>
    </div>
  `,
})
export class Child {


  @Input() value:string;
 @Output() valueChange:EventEmitter<string> = new EventEmitter<String>();

  constructor() {

  }

  update(value) {
    this.valueChange.emit(value);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43542645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档