当前位置:  开发笔记 > 编程语言 > 正文

组件输入属性上的双向数据绑定

如何解决《组件输入属性上的双向数据绑定》经验,为你挑选了2个好方法。

我试图在angular2上做一些工作,我无法找到关于这种行为的东西.

我有一个实现自定义组件的应用程序,如下所示:

import {Component,Input} from 'angular2/core'
    @Component({
      selector:'my-comp',
      template:` 

{{inputText}}

` }) export class MyComp{ @Input() inputText : string; }

我试图inputText从我的组件对我的变量进行双向数据绑定,如下所示:


其中testStringMyApp.ts包含字符串的变量.我希望在用户修改testString变量时inputText修改变量.

这是一个带有简单示例代码的Plunker:https://plnkr.co/edit/zQiCQ3hxSSjCmhWJMJph?p = preview

有没有办法简化这项工作?我是否必须在我的自定义组件和重载函数上实现Angular2类,以使其像ngModel?我是否必须创建一个类型的inputTextChanged变量,EventEmitter当它被更改时发出我的数据,并执行以下操作:


先感谢您.



1> Mark Rajcok..:

这在模板语法文档中解释,在带有NgModel的双向绑定部分中:

在内部,Angular将术语映射ngModelngModel输入属性和ngModelChange输出属性.这是一个更一般的模式的一个特定示例,它匹配Property Binding [(x)]x输入属性和xChangeEvent Binding 的输出属性.

如果我们有心情,我们可以编写我们自己的双向绑定指令/组件,遵循这种模式.

还要注意,这[(x)]只是属性绑定和事件绑定的语法糖:

[x]="someParentProperty" (xChange)="someParentProperty=$event"

在你的情况下,你想要


所以你的组件必须有一个inputText输入属性和一个inputTextChange输出属性(这是一个EventEmitter).

export class MyComp {
  @Input()  inputText: string;
  @Output() inputTextChange: EventEmitter = new EventEmitter();
}

要通知父级更改,只要组件更改了值inputText,就会发出一个事件:

inputTextChange.emit(newValue);

在您的场景中,MyComp组件inputText使用[(x)]格式绑定输入属性为ngModel,因此您使用事件绑定(ngModelChange)来通知更改,并在该事件处理程序中通知父组件更改.

在不使用ngModel的其他场景中,重要的是emit()每当inputTextMyComp组件中属性值发生变化时的事件.



2> David Gonzal..:

我将@pixelbits和@GünterZöchbauer的答案和评论结合起来,以便在我的问题上做出明确答案,如果将来有人正在搜索这个问题.

要使双向数据绑定适用于自定义变量,您需要根据以下内容创建组件.

MyComp.ts文件:

import {Component,Input,Output,EventEmitter} from 'angular2/core'
@Component({
  selector:'my-comp',
  templateUrl:``
})

export class MyComp{
  @Input() inputText : string;
  @Output() inputTextChange = new  EventEmitter();
}

MyApp.ts文件:

import {Component} from 'angular2/core'
import {MyComp} from './MyComp'

@Component({
  selector:'my-app',
  templateUrl:`

Bidirectionnal Binding test

My Test String : {{testString}}

`, directives:[MyComp] }) export class MyApp{ testString : string; constructor(){ this.testString = "This is a test string"; } }

在那里,与inputText变量的双向数据绑定正常工作.您可以对答案进行评论,以获得更美观或更简单的方法来实现此代码.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有