我正在使用Firebase和angular js进行搜索建议功能。基本上在键入搜索输入框时,我调用以下函数:
scope.suggestString = {};
scope.search = function(){
scope.suggestString = {};
firebaseDb.ref("users")
.orderByChild("Name")
.startAt(scope.searchedString)
.endAt(scope.searchedString + "\uf8ff")
.on("value", function(snapshot) {
snapshot.forEach(function(childSnapshot) {
if(scope.suggestString.hasOwnProperty(childSnapshot.key) == false){
scope.suggestString[childSnapshot.key] = childSnapshot;
}
});
});
}
HTML:
<form>
<input type="text" ng-model="searchedString" ng-keyup="search()">
<ul>
<li ng-repeat="(key,item) in suggestString">
<a href="#/home/{{key}}">{{item.val().firstName}}</a>
</li>
</ul>
</form>
代码工作正常,调用转到firebase并获取记录,但是我必须在搜索输入框中单击某个位置以显示建议。
我尝试使用scope。$ apply()但它不起作用。它说已经在应用范围
最佳答案
也许您可以使用类似:
<input ng-model="searchedString" ng-model-options="{debounce: 1000}" type="text">
输入框上的内容,在输入延迟1秒后,它将使用输入元素中的搜索字符串更新ng-model(searchString)。
之后,您可以输入:
scope.$watch('searchedString', (newVal,oldVal)=>{
scope.suggestString = {};
if(scope.searchedString.length <3){
return;
}
firebaseDb.ref("users")
.orderByChild("Name")
.startAt(scope.searchedString)
.endAt(scope.searchedString + "\uf8ff")
.on("value", function(snapshot) {
snapshot.forEach(function(childSnapshot) {
if(scope.suggestString.hasOwnProperty(childSnapshot.key) == false){
scope.suggestString[childSnapshot.key] = childSnapshot;
}
});
});
});
现在,如果您获取数据的代码正确,它应该可以工作。
关于javascript - 在模型中更改angularjs仅在单击某处时呈现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46329148/