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

0

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

вот мой код

$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."
                }



            }
        }
    };
Теги:
angularjs-scope
angularjs-directive
angularjs-ng-repeat

1 ответ

0
Лучший ответ

После отладки кода я обнаружил, что вы используете функцию bid при enter button press или search click 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."
                }

    };

Ещё вопросы

Сообщество Overcoder
Наверх
Меню