我制作了一个简单的UI,它由两个组件(父组件和子组件)组成.

UI的作用是,当我在子组件的输入框中键入一些内容时.该值将使用ngModel进行更改.

子组件以这种方式工作良好.

// Child Component
@Component({
    selector: 'child',
    template: `
        <p>{{sharedVar}}</p>
        <input [(ngModel)]="sharedVar">
    `
})
export class ChildComponent {
    sharedVar: string;
}

现在我有一个父组件,我打算使用与子组件相同的值.

我将子组件添加到父模板中,并使用依赖项注入调用子组件的sharedVar.

// Parent Component
@Component({
    selector: 'parent',
    template: `
        <h1>{{sharedVar}}</h1>
        <child></child>
    `,
    directives: [ChildComponent],
    providers: [ChildCompnent]
})
export class ParentComponent {
    sharedVar: string;
    constructor(child: ChildComponent) {
        this.sharedVar = child.sharedVar;
    }
}

问题是,当我在输入框中键入时,<p>中的值会自动更改,而父组件的<h1>中的值不会更改.

推荐答案

我们可以使用父模板中的[(x)]语法来实现与子模板的双向数据绑定.如果我们创建一个名为xChange的输出属性,Angular将自动更新父属性.我们确实需要在子元素更改值时创建一个事件,但是:

import {Component, EventEmitter, Input, Output} from 'angular2/core'

@Component({
    selector: 'child',
    template: `
        <p>Child sharedVar: {{sharedVar}}</p>
        <input [ngModel]="sharedVar" (ngModelChange)="change($event)">
    `
})
export class ChildComponent {
    @Input() sharedVar: string;
    @Output() sharedVarChange = new EventEmitter();
    change(newValue) {
      console.log('newvalue', newValue)
      this.sharedVar = newValue;
      this.sharedVarChange.emit(newValue);
    }
}

@Component({
    selector: 'parent',
    template: `
        <div>Parent sharedVarParent: {{sharedVarParent}}</div>
        <child [(sharedVar)]="sharedVarParent"></child>
    `,
    directives: [ChildComponent]
})
export class ParentComponent {
    sharedVarParent ='hello';
    constructor() { console.clear(); }
}

Plunker

我在ParentComponent中使用了sharedVarParent,只是为了证明父级和子级中的名称不必相同.

Typescript相关问答推荐

从传递的数组中出现的值设置返回键的类型

参数类型undefined不能分配给参数类型字符串|未定义

React typescribe Jest调用函数

通过按键数组拾取对象的关键点

类型脚本满足将布尔类型转换为文字.这正常吗?

Select 下拉菜单的占位符不起作用

通过泛型函数本身推断受约束的泛型参数的类型脚本问题

为什么我的动画状态在组件实例之间共享?

常量类型参数回退类型

vue-tsc失败,错误引用项目可能无法禁用vue项目上的emit

有没有办法防止类型交集绕过联合类型限制?

如何将类似数组的对象(字符串::匹配结果)转换为类型脚本中的数组?

将接口映射到交叉口类型

map 未显示控制台未显示任何错误@reaction-google-map/api

扩展对象的此内容(&Q;)

递归生成常量树形 struct 的键控类型

任何导航器都未处理有效负载为";params";:{";roomId";:";...";}}的导航操作

如何使用IsEqual创建断言类型相等的实用程序

仅当定义了值时才按值筛选数组

记录的子类型<;字符串,X>;没有索引签名