【问题标题】:Angular chained typeaheads break with whitespace角链式预输入中断与空格
【发布时间】:2021-05-24 21:09:39
【问题描述】:

给定两个带有预输入的条目,一个链接到另一个(第一个中的选择决定了第二个的选择列表),包含空格的值似乎存在问题,即使这些条目是通过 id 链接的,而不是显示值。

该行为最好在演示中展示:JSFiddle

复制:

  1. 在第一次预输入中选择一个对象
  2. 在第二个预输入中选择一个对象,看看它是否有效
  3. 在第一个预输入中选择名为 broken 的对象
  4. 尝试在第二个预输入中选择一个对象,没有可用的选择列表

第一个条目中所选对象的id 决定了第二个条目的选择列表。但是,如果所选对象的name末尾有空格,则第二个预输入中断。

如果您要删除 Broken 末尾的空格,第二个条目将按预期开始工作。

这对我来说似乎是一个错误,因为第一个条目的显示值不应该在第二个条目中发挥作用。

我错了吗?

【问题讨论】:

    标签: angularjs angular-ui-bootstrap typeahead


    【解决方案1】:

    在第一个输入中添加 ng-trim="false"。它解决了这个问题。它发生在 Angular 删除模糊的末端空间时。

        <input type="text"
               id="estate"
               cam-variable-type="String"
               ng-model="line.estate"
               uib-typeahead="estate as (estate.id + ' - ' + estate.name) for estate in estates | filter:$viewValue | limitTo:10"
               typeahead-min-length="1"
               typeahead-no-results="noResults"
               typeahead-select-on-blur="true"
               autocomplete="off"
               ng-trim="false"
               class="form-control form-input">
    

    【讨论】:

    • 这既不能解决问题,也不能解释为什么在通过 id 选择列表时显示名称参与链接条目
    • 当您在第一个输入中添加内容并退出输入时.. 角度修剪最后一个空格.. 所以实际上 id 在line.estate.id 中变为空。因此,当您从第一个输入中关闭该 ng-trim 时,它就会开始工作。
    • 你说得对,它确实解决了问题,对不起,我第一次看错了。
    • OTOH,它没有解释为什么显示名称与第二个输入有任何关系。如果我在 typeahead-on-select 中 console.log out line.estate,你可以看到整个数据对象被选中。它是与第二个输入相关的 ID。角度是否以某种方式通过名称识别对象? jsfiddle.net/dph06ewm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多