AngularJS: เหตุใดการค้นหาจึงทำงานไม่ถูกต้อง

ฉันกำลังพยายามค้นหาข้อความบนโต๊ะโดยใช้เชิงมุม .. ฉันสามารถค้นหาข้อความในตารางได้ แต่การค้นหาของฉันใช้ได้เมื่อฉันกด Enter หรือ "ปุ่มค้นหา" ตัวอย่างเมื่อฉันเขียน "ใช้งานอยู่" มันจะไม่แสดงผลลัพธ์ แต่เมื่อฉัน กด Enter หรือกดปุ่มค้นหาเพื่อแสดงผลลัพธ์ เราสามารถทำการค้นหาแบบเติมข้อความอัตโนมัติได้หรือไม่ ตัวอย่างเมื่อฉันกด "a" มันแสดงรายการทั้งหมดที่เริ่มจาก "a" จากนั้นถ้าผู้ใช้เขียน "ac" แล้วแสดง "ac" ค่า ..เช่นเดียวกัน เมื่อผู้ใช้เขียน “active” มันจะแสดงแถวที่มี “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."
                }



            }
        }
    };

comment
ซอของคุณไม่ทำงาน ลอง data-ng-keyup แทน ng-keyup   -  person Vineet    schedule 03.07.2015
comment
กรุณาพิมพ์ active แล้วกด enter .it show data .but I need to show search data without enter   -  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