如何处理'没有找到结果'在搜索功能中

时间:2016-11-20 22:41:05

标签: javascript angular typescript

我正在尝试显示"未找到结果"如果有人使用我的搜索功能搜索没有返回数据库结果的内容。我遇到的问题是"没有找到结果"立即打印到屏幕 - 然后在实际评估搜索查询时消失 - 然后在没有找到结果时重新出现。换句话说,它应该工作,因为它应该等到在打印之前实际触发和评估查询并且没有找到结果"到屏幕。从概念上讲,最好的方法是什么?一方面,我发现我可以使用超时。但这并没有直接解决问题。那么最好的方法是什么呢?这是我对函数的代码:

public get noResultsFound(): boolean
{
    if (this.query && !this._isSearching && !this.hasResults) {
        return true;
    }
}

这是我的观看代码:

<div *ngIf="inputHasFocus && noResultsFound" class="no-results-found">No Results Found</div>

2 个答案:

答案 0 :(得分:0)

承诺听起来像你需要的:D https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

有些事情。

search = (paramObj) : Promise<SomeDataClass> => {
    // Some search logic
}

requestSearch() {
    this.search(null).then((result) => {
        if (result.length === 0)
        {
            //logic for showing 0 results here
        }
        else{
            // Show result?
        }
    })
}

更完整的例子看起来有点像这样。

class example {
    public someBool = false;

    public search = (paramObj): Promise<Array<string>> => {
        this.someBool = !this.someBool;
        return new Promise<Array<string>>((resolver) => {
            // This just simulates something taking time.
            setTimeout(() => {
                if (this.someBool) {
                    resolver([]);
                } else {
                    resolver(["hi","there"]);
                }
            }, 1000)
        });
    }

    public requestSearch() {
        this.search(null).then((result) => {
            if (result.length === 0) {
                console.log("empty")
            }
            else {
                console.log(result)
            }
        })
    }
}

答案 1 :(得分:0)

所以,最后我能够解决这个问题,不是通过使用某种去抖超时,而是通过改变功能所关注的内容 - 可以这么说。通过这种方式处理它&#34;没有找到结果&#34;永远不会触发它。这就是我最终使用的:

public get noResultsFound(): boolean
{
    if (!Object.isNullOrUndefined(this._results) && this._results.length < 1) {
        return true;
    } 
}