AngularJS: почему поиск не работает должным образом?

Я пытаюсь найти текст в таблице с помощью angular. Я могу искать текст в таблице. Но мой поиск работает, когда я нажимаю ввод или «кнопку поиска». Например, когда я пишу «Активно», он не показывает результат, но когда я нажмите ввод или нажмите кнопку поиска, чтобы отобразить вывод. Можем ли мы сделать аналогичный поиск, например, автозаполнение. Например, когда я нажимаю «а», отображаются все элементы, которые начинаются с «а». Затем, если пользователь пишет «ac», затем показывает «ac» значение .. такое же, как это. когда пользователь пишет «активный», он показывает строки, которые имеют «активный», без использования кнопки поиска или ввода. можем ли мы добавить фильтр, чтобы он работал правильно?

вот мой код

$scope.searchInvoices = function(evt, queryval) {
        $scope.haveNorecordFound = true;

        if (typeof queryval != "undefined" && queryval.length === 0 || evt.keyCode === 13 || evt.type === 'click') {
            if (typeof queryval == "undefined" || queryval.length === 0) {
                console.log("if===")

                isfilterOccured = false;
                $scope.tasklist_records = $scope.total_tasklist_records;
                $scope.totalNumberOfrecord = $scope.tasklist_records.length + " records found."
            } else {
                console.log("esle===")
                var recordset = $scope.serachObject;
                results = [];
                var recordsetLength = recordset.length;
                var searchVal = queryval.toLowerCase();
                var i, j;

                for (i = 0; i < recordsetLength; i++) {
                    var record = recordset[i].columns;

                    for (j = 0; j < record.length; j++) {
                        if (record[j].value != null) {
                            var invoice = record[j].value.toLowerCase();
                            if (invoice.indexOf(searchVal) >= 0) {
                                results.push(recordset[i]);
                            }
                        }
                    }
                }
                var nameOrPathValues = results.map(function(o) {
                    var result = {};
                    o.columns.forEach(function(c) {
                        result[c.fieldNameOrPath] = c.value;
                    });
                    return result;
                });
                console.log("serach");

                console.log(nameOrPathValues);

                var objectarray = nameOrPathValues.map(function(o) {
                    var result = {};
                    collectNameOrPath.forEach(function(name) {
                        result[name] = o[name];
                    });
                    return result;
                });
                isfilterOccured = true;


                $scope.tasklist_records = objectarray;
                if ($scope.tasklist_records.length == 0) {
                    $scope.haveNorecordFound = false;
                } else {
                    $scope.totalNumberOfrecord = $scope.tasklist_records.length + " records found."
                }



            }
        }
    };

person user944513    schedule 03.07.2015    source источник
comment
Ваша скрипка не работает, попробуйте data-ng-keyup вместо ng-keyup   -  person Vineet    schedule 03.07.2015
comment
пожалуйста, введите активный, затем нажмите ввод. он показывает данные. но мне нужно показать данные поиска без ввода   -  person user944513    schedule 03.07.2015
comment
Вы уверены, что ваш плунжер работает? Пожалуйста, проверьте еще раз   -  person Vineet    schedule 03.07.2015
comment
создать новый плунжер   -  person Vineet    schedule 03.07.2015
comment
Давайте продолжим обсуждение в чате.   -  person user944513    schedule 03.07.2015


Ответы (1)


После отладки кода я обнаружил, что вы выполняете функцию ожидания либо на enter button press, либо на search click. Вот почему это не работало на ng-keyup. Пожалуйста, замените свою функцию из приведенного ниже кода.

$scope.searchInvoices = function(evt, queryval) {
      console.log(queryval)
      $scope.haveNorecordFound = true;
      var recordset = $scope.serachObject;
                results = [];
                var recordsetLength = recordset.length;
                var searchVal = queryval.toLowerCase();
                var i, j;

                for (i = 0; i < recordsetLength; i++) {
                    var record = recordset[i].columns;

                    for (j = 0; j < record.length; j++) {
                        if (record[j].value != null) {
                            var invoice = record[j].value.toLowerCase();
                            if (invoice.indexOf(searchVal) >= 0) {
                                results.push(recordset[i]);
                            }
                        }
                    }
                }
                var nameOrPathValues = results.map(function(o) {
                    var result = {};
                    o.columns.forEach(function(c) {
                        result[c.fieldNameOrPath] = c.value;
                    });
                    return result;
                });
                console.log("serach");

                console.log(nameOrPathValues);

                var objectarray = nameOrPathValues.map(function(o) {
                    var result = {};
                    collectNameOrPath.forEach(function(name) {
                        result[name] = o[name];
                    });
                    return result;
                });
                isfilterOccured = true;


                $scope.tasklist_records = objectarray;
                if ($scope.tasklist_records.length == 0) {
                    $scope.haveNorecordFound = false;
                } else {
                    $scope.totalNumberOfrecord = $scope.tasklist_records.length + " records found."
                }

    };
person Vineet    schedule 03.07.2015