Javascript 使用angularjs刷新typeahead内容
我的情况如下: 我有一个搜索字段,用户在其中键入文本,Web服务尝试根据迄今为止输入的信息建议值 我的问题是Web服务有时需要2-3秒来生成数据,而typeahead列表没有及时填写Javascript 使用angularjs刷新typeahead内容,javascript,angularjs,Javascript,Angularjs,我的情况如下: 我有一个搜索字段,用户在其中键入文本,Web服务尝试根据迄今为止输入的信息建议值 我的问题是Web服务有时需要2-3秒来生成数据,而typeahead列表没有及时填写 <form data-ng-submit="selectItem(message);"> <input type="text" data-ng-model="message" data-ng-change="handleChange(message);" data-typeahead-w
<form data-ng-submit="selectItem(message);">
<input type="text" data-ng-model="message" data-ng-change="handleChange(message);" data-typeahead-wait-ms="500" data-typeahead="o for o in searchOptions | filter:$viewValue | limitTo:8">
<input type="submit" style="height: 0px; width: 0px; border: none; padding: 0px;" data-hidefocus="true" />
</form>
然后在另一个控制器中侦听此消息:
$scope.$on('startSearch', function() {
// here there is a $http.get which gets all the data after reading search string
searchService.setOptions(selectionlist); // this gives back the result
$injector.get('$rootScope').$broadcast('updatedOptions'); // calls the original controller
}
然后在原始控制器中
$scope.$on('updatedOptions', function() {
$scope.searchOptions = searchService.getOptions(); // reading the list from service
$scope.$apply(); // tried this - didnt work.
});
问题是,当我将服务结果添加到页面上的正常数据中时,数据可用时(即2秒后)会正确显示。但是,typeahead列表不会更新
更新2
更具体地说,最后一句话:
<form data-ng-submit="selectItem(message);">
<input type="text" data-ng-model="message" data-ng-change="handleChange(message);" data-typeahead-wait-ms="500" data-typeahead="o for o in searchOptions | filter:$viewValue | limitTo:8">
<input type="submit" style="height: 0px; width: 0px; border: none; padding: 0px;" data-hidefocus="true" />
</form>
{{searchOptions}}
{{searchOptions}}
如果我添加最后一行,则在服务完成填充此数据后,该行将正确更新。只有typeahead没有刷新。因此,在上面的例子中,我开始键入搜索子字符串,当搜索完成后,{{searchOptions}}将用搜索结果正确更新
问题是:有没有办法强制重新生成输入字段,以便考虑带有新数据的typeahead标记?您是否尝试过
$scope.$apply()
,是否使用$.ajax
进行webservice调用?如果是这样,请尝试$http
。Web服务位于不同的控制器中-我正在使用angular.module的共享服务进行通信($broadcast and$on)。当数据可用时,webservice会广播一个字符串,在这个控制器中,在接收到广播后,我从服务中获取它,并将其注入searchOptions。是的,我试过$scope。$apply,可惜没有用。请发布一个最小的复制场景,否则几乎无法猜测您的案例中发生了什么。typeahead可以完美地处理异步数据……这很奇怪,因为typeahead实现总是知道它们将异步接收数据。您正在使用哪个实现?-创建了这个JSFIDLE(不适用于Chrome,不知道为什么,但适用于FireFox)。这显示了我的错误。如果您在搜索字段中键入“a”,您可以看到2秒钟后列表生成。但是,typeahead选项不会出现。看来已经太晚了。
<form data-ng-submit="selectItem(message);">
<input type="text" data-ng-model="message" data-ng-change="handleChange(message);" data-typeahead-wait-ms="500" data-typeahead="o for o in searchOptions | filter:$viewValue | limitTo:8">
<input type="submit" style="height: 0px; width: 0px; border: none; padding: 0px;" data-hidefocus="true" />
</form>
{{searchOptions}}