Javascript 如果使用UI引导的typeahead指令未找到匹配项,则表单不可编辑?

Javascript 如果使用UI引导的typeahead指令未找到匹配项,则表单不可编辑?,javascript,html,angularjs,angular-ui-bootstrap,Javascript,Html,Angularjs,Angular Ui Bootstrap,下面是如何设置我的typeahead输入框的相关代码。本质上,用户键入一个名称,相关信息被加载到表单的其余部分。如果没有找到匹配项,我希望用户仍然能够在表单中输入名称和相关信息 如果未找到匹配项,则表单不可编辑。例如,如果在名称中键入John Doe,但没有匹配项,则无法在地址输入框中键入,其代码如下所示 提前打印: 示例输入框: 这是因为当您在typeahead中键入字符串时,entry.participant现在就是该字符串,而不是对象。不能将.street添加到字符串中。相反,您需要创建一

下面是如何设置我的typeahead输入框的相关代码。本质上,用户键入一个名称,相关信息被加载到表单的其余部分。如果没有找到匹配项,我希望用户仍然能够在表单中输入名称和相关信息

如果未找到匹配项,则表单不可编辑。例如,如果在名称中键入John Doe,但没有匹配项,则无法在地址输入框中键入,其代码如下所示

提前打印:

示例输入框:


这是因为当您在typeahead中键入字符串时,entry.participant现在就是该字符串,而不是对象。不能将.street添加到字符串中。相反,您需要创建一个新对象,获取entry.participant字符串并将其作为.name分配给该对象,然后将entry.participant设置为该对象

我会这样做:首先将typeahead editable设置为false。在typeahead输入框中添加一个按钮bootstrap的输入组很好地做到了这一点,即显示New并隐藏typeahead,并用另一个具有entry.participant.name模型的输入框替换它。单击“新建”后,立即设置entry.participant={}。你也可以在这一点上用Cancel或X替换掉这个新的

编辑 这里有一个 我将typeahead保持为可编辑状态,以便您可以看到选择Bob或Jim时模型与仅键入字符串时的差异。否则,在您从下拉列表中选择某个对象之前,不会设置模型

<label for="participant-name">Name</label>
<input name="participant-name" typeahead="participant as participant.name for participant in participants | filter:$viewValue | limitTo: 8" type="text" class="form-control" ng-model="entry.participant">
<label for="participant-street-no">Address</label>
<input name="participant-street-no" type="text" class="form-control" ng-model="entry.participant.street">