我正在使用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/

10-12 15:12