Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用angularjs刷新typeahead内容_Javascript_Angularjs - Fatal编程技术网

Javascript 使用angularjs刷新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

我的情况如下:

我有一个搜索字段,用户在其中键入文本,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-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}}