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

2024-04-28

我正在尝试在 angular2 上做一些事情,但我无法找到有关此行为的信息。

我有一个应用程序实现像这样的自定义组件:

import {Component,Input} from 'angular2/core'
    @Component({
      selector:'my-comp',
      template:`<input type="text" style="text-align:center; [(ngModel)]="inputText"> <p>{{inputText}}</p>`
    })

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

我正在尝试对我的设备进行双向数据绑定inputText我的组件中的变量如下所示:

<my-comp [(inputText)]="testString"></my-comp>

哪里的testString是定义在中的变量MyApp.ts其中包含一个字符串。我想要我的testString当我的变量被修改inputText由用户修改。

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

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

<my-comp [inputText]="testString" (inputTextChanged)="testString = $event;"></my-comp>

先感谢您。


模板语法文档中对此进行了解释使用 NgModel 进行双向绑定 https://angular.io/docs/ts/latest/guide/template-syntax.html#!#ngModel部分:

<input [(ngModel)]="currentHero.firstName">

在内部,Angular 映射了该术语,ngModel, to an ngModel输入属性和ngModelChange输出属性。这是它匹配的更通用模式的一个具体示例[(x)] to an x属性绑定的输入属性和xChange事件绑定的输出属性。

如果我们愿意的话,我们可以编写自己的遵循此模式的双向绑定指令/组件。

另请注意[(x)]只是属性绑定和事件绑定的语法糖:

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

在你的情况下,你想要

<my-comp [(inputText)]="testString"></my-comp>

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

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

每当您的组件更改值时,通知父级更改inputText,发出一个事件:

inputTextChange.emit(newValue);

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

在其他不使用 ngModel 的场景中,重要的是emit()每当财产价值发生事件inputTextMyComp 组件中的更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

组件输入属性上的双向数据绑定 的相关文章

随机推荐

  • 如何在 Xcode 7 Beta 5 中安装 iOS 7 及更高版本的模拟器?

    我想在 iOS 7 及更高版本上测试我的应用程序 在这些操作系统中测试我的应用程序的唯一方法是使用模拟器 但是将 Xcode 升级到 7 Beta 后 我看到了 iOS 8 1 8 2 8 3 但收到一条错误消息 指出未找到它们 iOS7
  • 使用 PHP 将数据添加到 json

    我使用 json decode 创建一个 json 对象 在浏览了一些元素之后 我想向其中添加子元素 我该怎么做呢 取决于您传递给的选项json decode http php net manual en function json dec
  • 在 Swift 4 IOS 中将 XML 数据获取到 String 中

    我有一个 XML 字符串格式 我想使用 Swift 4 从它获取单个值到字符串变量 我的数据如下 let myString Adasdnajinasdshabjdbaiusd Encrypted Text Sample let MyResu
  • 分段表单上传和 NSURLSession.uploadTaskWithRequest 之间的区别

    来自网络编程领域 我非常喜欢使用多部分表单请求来上传文件 然而 在iOS中 我们有一个东西叫做NSURLSession用方法uploadTaskWithRequest 这似乎是调用进行图像上传等操作的方法 您能解释一下这两种方法之间的区别吗
  • XMLHttpRequest 无法加载 ZScaler 的问题

    我在 EC2 实例中托管了一个网站 并使用以下命令访问该页面http ec2 网址 该页面向同一实例上托管的另一个 Web 应用程序发出 ajax 请求 如果我访问通过 ZScaler 代理的页面 我会得到XMLHttpRequest ca
  • 后视模式无效

    为什么这个正则表达式在 Python 中有效 但在 Ruby 中无效
  • 如何以编程方式设置(文本)视图属性?

    我拼命尝试以编程方式设置表中单元格的 TextView 属性 但无法使其工作 每当我设置布局属性时 该字段将不会出现 但不会给出任何错误或异常 我将其归结为这个简单的例子 package mmo application listpro im
  • 如何包装 UnityEngine.Debug.Log 但在单击时保留代码行

    我有这种代码 目的是包装UnityEngine Debug Log所以我也可以在生产中禁用它们 以便我可以稍后查找 过滤 using System public enum LogType DEBUG CRITICAL public clas
  • 找不到不使用 GL11Ext 进行绘图的 android 2d opengl sprite 类的合适示例

    正如 SpriteMethodTest 所说 绘制精灵的方法有很多种 首先 我尝试了canvas 并遇到了一些性能问题 接下来 我决定学习opengl 我使用 GL11Ext 扩展取得了第一个成就 但是 默认情况下您知道 当您绘制纹理时 它
  • 如何使用 JAVA 将本地图像而不是 URL 发送到 Microsoft Cognitive Face API

    我正在尝试使用 Microsoft 认知服务的 Face API 我想知道如何通过 Rest API 调用将本地图像发送到 Face API 并使用它请求结果JAVA 有人可以帮我解决这个问题吗 Microsoft 在其网站上提供的测试选项
  • 如何将 Slick 插值查询拆分为多行?

    有什么方法可以将 Slick 插值查询拆分为代码中的多行吗 我的查询往往会变得相当长 所以我寻找类似以下的东西 val query sql select from DOCUMENTS sql where language lang orde
  • jQuery 文本区域中的每一行

    html
  • CDO.消息编码问题

    我们目前正在将邮件递送系统更改为仅使用UTF 8 发件人姓名似乎有问题 当电子邮件包含非 ASCII 字符 希伯来语 时 主题和正文呈现正常 但发件人姓名 如出现在我的 gmail 帐户中 变为 有一行代码 myMail BodyPart
  • 是否需要显式事务回滚?

    许多例子都主张显式回滚数据库事务 大致如下 using var transaction try do some reading and or writing here transaction Commit catch SqlExceptio
  • 查找数组中是否有任何项目符合条件

    我是 JavaScript 新手 现在 我有一个包含多个对象的数组 因此 我想迭代它 如果任何对象与条件匹配 那么我想返回一个值并停止该循环 我的 obj 数组就像 var obj type numberOfQuestions techno
  • 在生产 PostgreSQL 连接中将rejectUnauthorized 设置为 false 可以吗?

    我们最近转移到 Heroku 并在尝试将我们的应用程序连接到数据库时 它不断拒绝我们的查询 并显示消息 自签名证书 传入rejectUnauthorized解决了这个问题 但现在我想知道 我们应该在生产中这样做吗 如果没有 我们连接到 He
  • 尝试导入 cv2(opencv-python) 包时出错

    我正在尝试使用 cv2 opencv python 包访问我的网络摄像头 当我尝试导入它时 出现此错误 Traceback most recent call last File server py line 6 in
  • 在普罗米修斯中找不到查询 label_values [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 在 Grafana 文档中 我发现我应该能够查询我的 Prometheus 服务器以获取使用以下命令提供监控数据的所有实例 lab
  • Mysql使用tenant_id进行复合索引

    我们有一个多租户应用程序 该应用程序有一个包含 129 个字段的表 这些字段都可以在 WHERE 和 ORDER BY 子句中使用 我花了 5 天的时间试图找出最适合我们的索引策略 我获得了很多知识 但我仍然有一些问题 1 创建索引时 我应
  • 组件输入属性上的双向数据绑定

    我正在尝试在 angular2 上做一些事情 但我无法找到有关此行为的信息 我有一个应用程序实现像这样的自定义组件 import Component Input from angular2 core Component selector m