Angular UI bootstrap typeahead,ng-model从对象更改为字符串

时间:2017-01-24 13:38:11

标签: angularjs angular-ui-bootstrap bootstrap-typeahead

我有一个UI bootstrap Typeahead的问题。这是plnkr,解释如下。

http://plnkr.co/edit/lvy1Xu13xfFBjHbIY68H?p=preview

我希望能够从Typeahead列出的状态中选择一个状态,但也能够以相同的形式创建新状态,通过写入不存在的状态名称来创建属性名称和标志。

从Typeahead中选择状态时,一切都按预期工作。您选择整个对象,属性“state”和“flag”也会被选中。当您编写的字符串与Typeahead中列出的任何选项都不匹配时,会发生此问题。假设您想要使状态为“myState”然后ng-model是字符串而不是对象,就像从typeahead中选择一个选项而无法输入flag属性,因为您无法在字符串上创建属性。 / p>

有什么方法可以改变uib-typeahead设置或以某种方式更改ng-model,制作一些能够将ng-model从字符串更改为对象的功能,或类似的东西?

<input type="text" ng-model="customPopupSelected" placeholder="state" uib-typeahead="state as state.name for state in statesWithFlags | filter:{name:$viewValue}" typeahead-popup-template-url="customPopupTemplate.html" class="form-control">

<input type="text" ng-model="customPopupSelected.flag" placeholder="flag" class="form-control"> 

这是我想要实现的简化解释。当我从Typeahead中选择状态时,状态如下所示:

state = { 
  "name": "Arizona",
  "flag": "9/9d/Flag_of_Arizona.svg/45px-Flag_of_Arizona.svg.png"
}

当我开始输入并键入不存在的状态时,state是一个字符串。

state = "myState"

所以我无法添加新的“state.name”,然后将“state.flag”属性添加到state对象。所以我想以某种方式解决这个问题,如果有可能的话,我可以自己创建状态。

state = { 
  "name": "myState",
  "flag": "mystate-flag.svg.png"
}

2 个答案:

答案 0 :(得分:0)

使用Uib-typeahead

添加typeahead-editable =“false”
<input typeahead-editable="false" type="text" ng-model="customPopupSelected" placeholder="state" uib-typeahead="state as state.name for state in statesWithFlags | filter:{name:$viewValue}" typeahead-popup-template-url="customPopupTemplate.html" class="form-control">

<input type="text" ng-model="customPopupSelected.flag" placeholder="flag" class="form-control">

我希望这会对你有所帮助。

答案 1 :(得分:0)

您可以添加SELECT count(*) FROM `maw_qa.rt_content_secondly_*` where _PARTITIONTIME = timestamp('2017-01-24');

$scope.$watch

这是您更新的plunker:http://plnkr.co/edit/jezOW8SEJUh59CzwFpr8?p=preview