AngularJS: mengapa pencarian tidak berfungsi dengan benar?

Saya mencoba mencari teks di tabel menggunakan sudut ..Saya dapat mencari teks di tabel. Tetapi pencarian saya berfungsi ketika saya menekan enter atau "tombol pencarian". Contoh ketika saya menulis "Aktif" tidak muncul hasilnya tetapi ketika saya tekan enter atau tekan tombol cari maka akan muncul hasilnya. Bisakah kita melakukan pencarian seperti pelengkapan otomatis. Contoh ketika saya menekan “a' maka akan muncul semua item yang dimulai dari “a”. Kemudian jika pengguna menulis “ac” maka tampilkan “ac” nilainya ..sama seperti itu. Ketika pengguna menulis "aktif" itu menunjukkan baris-baris yang "aktif" tanpa menggunakan tombol pencarian atau enter. Bisakah kita menambahkan filter agar berfungsi dengan baik?

ini kode saya

$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 sumber
comment
Biola Anda tidak berfungsi, coba data-ng-keyup daripada ng-keyup   -  person Vineet    schedule 03.07.2015
comment
silakan ketik aktif lalu tekan enter. Itu tampilkan data. Tapi saya perlu menampilkan data pencarian tanpa enter   -  person user944513    schedule 03.07.2015
comment
Apakah Anda yakin plunker Anda berfungsi? Silakan periksa lagi   -  person Vineet    schedule 03.07.2015
comment
membuat plunker baru   -  person Vineet    schedule 03.07.2015
comment
Mari kita melanjutkan diskusi ini dalam chat.   -  person user944513    schedule 03.07.2015


Jawaban (1)


Setelah men-debug kode, saya menemukan bahwa Anda menawar fungsi pada enter button press atau search click. Itu sebabnya itu tidak berfungsi pada ng-keyup. Silakan ganti fungsi Anda dari kode di bawah ini.

$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