Angular 2 选择组件设置初始选择

2023-12-22

我正在尝试使用 ngModel 在 Angular 2 中创建一个选择组件包装器。一旦选择更改,所有事件都会正确触发,但我无法在渲染时设置初始选择。

这是我的组件:

@Component({
selector: 'my-dropdown',
inputs: ['selectedItem', 'items', 'label'],
outputs: ['selectedItemChange'],
template: `
<div class="field">
  <label>{{label}}</label>
    <select class="ui search selection dropdown" [ngModel]="selectedItem" (change)="onChange($event.target.value)">
      <option value="" selected>Please Select</option>
      <option *ngFor="#item of items" [value]="item.value">{{item.label}}</option>
    </select>
</div>`
})

export class MyDropdownComponent {

items: DropdownValue[];
selectedItem: DropdownValue;
selectedItemChange: EventEmitter<any> = new EventEmitter();

private onChange(newValue) {

    console.log(newValue);
    this.selectedItem = this.items.find(item => item.value == newValue);
    console.log(this.selectedItem);
    this.selectedItemChange.emit(newValue);
}
}

我在视图中使用它,如下所示:

<my-dropdown [items]="selectItems" [(selectedItem)]="itemToSelect" [label]="'Please Select'"></my-dropdown>

当我设置itemToSelectvalue 在 init 时的父组件中,它不会在 UI 中设置选定的选项值。

我也尝试过使用ngModelChange事件,但它不会触发更改事件。


itemToSelect最初设置为一个对象,因此 MyDropdownComponent 的 input 属性最初设置为一个对象。但随后在onChange()字符串值是emit()ted,然后导致itemToSelect设置为字符串,因此输入属性变为字符串。不好。

只要坚持使用一个物体,它就会起作用。另外,不需要分配this.selectedItem in onChange(),因为所选值将从父级向下传播(通常,您永远不应该在组件中设置输入属性 - 它看起来也很奇怪)。您还可以使用ngModelChange现在也是:

<select class="ui search selection dropdown" [ngModel]="selectedItem.value"
 (ngModelChange)="onChange($event)">

private onChange(newValue) {
    console.log('nv',newValue);
    selectedItem = this.items.find(item => item.value == newValue);
    console.log('si',selectedItem);
    this.selectedItemChange.emit(selectedItem);
  }
}

Plunker http://plnkr.co/edit/ORBXA59mNeaidQCLa5x2?p=preview

请注意,我没有解决用户选择“请选择”的问题。您需要添加一些逻辑onChange()来处理那个案子。

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

Angular 2 选择组件设置初始选择 的相关文章

随机推荐

  • 如何在android中的文件中追加数据

    谁能告诉我如何将数据附加到 Android 中已有数据的文件中 我写了一些代码 但它不起作用 这是我的活动 package updatefile developer com updatefiledemo import android sup
  • android 上的 saxParser 有错误(格式不正确(无效令牌))

    我正在尝试从 url link 获取 xml 文件 此代码适用于安卓 我正在使用 SAXParser 来完成此操作 但我有错误 org apache harmony xml ExpatParser ParseException At lin
  • C# Windows 服务 - 安装时的默认参数

    我的应用程序 这是一项 Windows 服务 需要一个命令行参数 它是配置文件的位置 我希望该服务能够自动启动 填写 启动参数 值仅适用于手动启动它 并且该值在服务停止后不会保留 我尝试在注册表中手动编辑 可执行文件的路径 但 net 服务
  • 为什么 `(['1','2','3']).map(parseInt)` 无法得到正确的结果?

    1 2 3 map n gt parseInt n 将返回预期结果 1 2 3 But 1 2 3 map parseInt returns 1 NaN NaN 哪里错了 As Array map https developer mozil
  • 从 C++ 中的另一个程序重定向标准输出

    我正在编写单元测试 因此无法更改我正在测试的文件中的代码 我正在测试的代码在 cout 中有消息 我试图将其重定向到文件中以检查以确保程序输出正确的消息 有谁有办法在另一个程序中重定向标准输出而不会导致延迟 我尝试过 freopen 这导致
  • 从 C++ 调用 Java:如何捕获/检测致命 JVM 错误?

    我正在开发一个 C 程序 Win32 MS Visual Studio 2008 它通过 JNI 创建一个 Java VM 如下所示here http docs oracle com javase 6 docs technotes guid
  • Android Listview项目10秒后自动更改?

    我有两个数组列表 一个是出发列表 一个是到达列表我想显示此列表 或者表示 10 秒后列表会自动更改 前 10 秒出发列表和后 10 秒到达列表 我将把我的代码放在这里我将尝试使用可运行的但我的应用程序在运行此代码时挂起 主页活动 java
  • 将数据从子窗口传递到主窗口 TextBlock

    在这个例子中 MainWindow有一个打开的按钮Window2 Window2有一个按钮写着 Hello World 到MainWindow文本块 项目来源 https www dropbox com s jegeguhycs1mewu
  • C++ 中的 substr() 方法

    我正在尝试将一些表达式子串为单个标记 例如 等 我遇到的问题是 当我尝试使用下面的 cout 行创建 S B H S J R P 的子字符串时 我得到 S J R P 而我认为应该是 S J R 它要么超出了我所见过的范围 要么就是太简单了
  • ASP.NET MVC 中的面向方面编程

    我目前正在 ASP NET 中开发 MVC 应用程序 我正在尝试分离关注点 以便最终得到更干净 更易于维护的代码 因此 作为一个起点 我正在考虑日志记录方面 我的想法是 最初 记录每个控制器中每个方法的调用和返回 我会将这个逻辑放在一个单独
  • 改造 POST 请求 response.isSuccessful() 返回 false

    我正在努力使POST使用 Retrofit2 请求 但我现在的处境是response isSuccessful 返回 false 我不知道如何调试它 我检查了后端的日志 没有错误 什么也没有 我确保请求的 URL 正确 所有参数也正确 我做
  • 使用 gradle 构建 android,替换每个产品风味的字符串

    在我将 Android 项目构建为两个不同的付费和免费应用程序之前 我更改了每个值和字符串 所以昨天我犯了一个大错误 所以 我正在学习如何使用 gradle 来构建我的应用程序 我的应用程序有一些差异 应用程序名称 只需添加后缀 Free
  • 将 NaN 替换为 pandas 数据框中的空列表

    我正在尝试用空列表 替换数据中的一些 NaN 值 但是该列表表示为 str 并且不允许我正确应用 len 函数 无论如何 有没有办法用 pandas 中的实际空列表替换 NaN 值 In 28 d pd DataFrame x 1 2 3
  • 如何创建包含所有点的箱线图,其中对于每个组,可以手动分配点的颜色

    我有一个数据框 gt dput df2 structure list Genotype c miR 15 16 FL miR 15 16 FL miR 15 16 FL miR 15 16 FL miR 15 16 FL miR 15 16
  • 使用 ruby​​ gsub 和 regexp 进行更智能的字符替换

    我正在尝试为某些文章标题创建类似于永久链接的行为 但我不想为永久链接添加新的数据库字段 所以我决定编写一个助手 将我的文章标题从 O focoas a pornit cruciada mpotriva b rba ilor zg rci i
  • Composer 自动加载 - 找不到类

    我正在运行一个 Silex 小应用程序 试图让某种结构继续下去 这是我的composer json require silex silex 1 3 autoload psr 0 HelloWorld Controller src Hello
  • 进行布尔或可见性的最佳方法

    我有一个控件 仅当一系列属性中至少有一个返回 true 时 我才希望该控件可见 我正要实现我自己的 BooleanOrToVisibilityMultiConverter 但感觉必须有一个更好的 并且完全明显的 方法来做到这一点 请赐教 M
  • 如何声明 C# Web 用户控件但阻止其初始化?

    我有一个 C ASP NET aspx 页面 它声明了两个控件 每个控件代表一个选项卡的内容 我需要一个查询字符串参数 例如 tab 1 来确定激活两个控件中的哪一个 我的问题是 它们都经历初始化事件并填充其子控件 浪费 CPU 资源并减慢
  • 从外部禁用 Linux 程序的信号

    在 Linux 上 是否可以以某种方式禁用程序的信号发送外在地 也就是说 不修改他们的源代码 Context 我正在呼叫 C 还有一个Java 在 Linux 上的 bash 脚本中编写程序 我不希望我的 bash 脚本以及该脚本启动的其他
  • Angular 2 选择组件设置初始选择

    我正在尝试使用 ngModel 在 Angular 2 中创建一个选择组件包装器 一旦选择更改 所有事件都会正确触发 但我无法在渲染时设置初始选择 这是我的组件 Component selector my dropdown inputs s