18

使用Angular 4,我有一个html模板,我想要一个带有两个选项的选择框。默认情况下,应预先选择其中一个选项。

<select name=“rate”#rate=“ngModel”ngModel required><选项选择值=“hr”>hr<期权价值=“yr”>年</option></选择>

细节:

我分配#rate=“ngModel”这样我就可以在模板中的其他地方、在条件语句中或通过插值引用该值{{rate.value}}。为了实现这一点,我只需添加ng型号到标签。我没有绑定到组件类中的任何内容,因为此控件仅用于向同一模板中的另一个控件提供其值。

问题:

在Chrome和Microsoft Edge中,该框为空,未选择默认值。如果我摆脱#rate=“ngModel”ngModel它起作用了。然而,我需要参考费率.价值.

我尝试了ngValue、value、[ngValue]、[value]的各种组合,但我没有尝试将值绑定到模型,也没有使用ngFor循环。选择框上也没有其他样式。

6
  • 不仅仅是<select[(ngModel)]=“rate”required>工作吗?
    – 织女星
    评论 2017年10月13日19:01
  • @Vega,它不是双向绑定,所以在这种情况下不应该使用[()]语法。我相信。
    – 诽谤
    评论 2017年10月13日19:56
  • 这不起作用,我需要模板变量#rate=“ngModel”这样我就可以在模板表单的其他地方引用它。我也不想调用事件。我编辑了我的帖子的细节,希望能更好地描述用例。
    – 斯兰登
    评论 2017年10月13日20:27
  • 这看起来像是我要完成的,它确实是从选择选项开始的。但是,在尝试该链接并在代码中尝试后,我注意到{{rate.value}}不会更新。
    – 诽谤
    评论 2017年10月13日20:34
  • 这很正常,因为没有双向绑定,但它已经更新了。查看更新的演示
    – 织女星
    评论 2017年10月13日20:48

3个答案

重置为默认值
18

当您使用ng型号,状态在内部处理,应用于属性的任何显式更改都将被忽略。在您的示例中,您正在设置挑选出来的的属性选项,但您也在为您的选择,因此Angular期望选择在ngModel中提供。

简单地说,你应该利用ng型号而不是设置挑选出来的属性:

<选择name=“费率”#rate=“ngModel”[(ngModel)]=“您的模型名称”必修的><选项值=“hr”>hr<期权价值=“yr”>年</option></选择>

以及:

yourModelName:string;构造函数(){this.yourModelName=“hr”;}
  • 什么是对数(速率)?这只是一个自定义函数的示例吗?请注意,我没有绑定到组件类中的任何变量,选择框只是为了让用户可以选择一个值,这样我就可以在模板的其他地方使用该值。
    – 诽谤
    评论 2017年10月13日20:31
  • 不,这只是我出于测试目的添加的一行,但我忘记删除了。我把它复制粘贴错了 评论 2017年10月13日20:36
  • 无论如何,您需要在组件中绑定引用才能预选值。ngModel就是这样工作的 评论 2017年10月13日20:38
10

如果不希望进行双向绑定,可以将ngModel设置为“default”值,并使用模板局部变量获取所选值:

<select#rate ngModel=“hr”><选项选择值=“hr”>hr<期权价值=“yr”>年</option></选择><p*ngIf=“rate.value==‘hr’”>小时<p*ngIf=“rate.value=='yr'”>年</p>{{rate.value}}

演示

  • 1
    谢谢您!我一直在阅读其他方法,但它们都不起作用。Angular 5管道的文档显示它为[(ngModel)]='rate',如果我动态填充选项以及随之而来的所有内容,这将起作用。但只有两三个硬编码选项可以使用。这在概念上非常简单。这是一个非常基本和简单的东西,我对这些复杂的建议/修复感到惊讶。 评论 2017年11月7日17:22
  • 1
    请注意,如果您使用的是反应式表单,则v7不推荐使用此选项:角度.io/api/forms/FormControlName#use-with-ngmodel
    – 喉咙
    评论 2019年2月13日16:06
  • @rynop,不,即使是以前的版本,最好不要混合反应式表单和ngModel。但OP无论如何都不使用它,我的示例也是:)
    – 织女星
    评论 2019年2月13日16:33
0

如果您使用的是反应式表单,那么在定义表单模型时设置默认值也会有所帮助。

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.