Ng-显示过滤后的搜索是不是为空?

Posted

技术标签:

【中文标题】Ng-显示过滤后的搜索是不是为空?【英文标题】:Ng-Show if filtered search is not empty?Ng-显示过滤后的搜索是否为空? 【发布时间】:2014-11-10 17:31:03 【问题描述】:

我目前正在为我的电视节目网络应用创建实时搜索。一切正常。我想要的是,如果过滤后的搜索为空,则不显示 <div> 我当前的实现虽然不起作用...

如果用户没有输入任何内容,我也希望它显示类似Please typ to search 的内容...

<div ng-controller="SearchController">

    <div ng-show='shows.length > 0'>

        <h3>Shows you've seen:</h3>

        <hr>

        <ul>

            <li ng-repeat="show in shows | filter: searchbar">

                 show.name 
                <img  src="img/artwork/ show.image_name .png" style="width:50px;height:50px;">

            </li>

        </ul>

        <hr>

    </div>

    <div ng-show='allshows.length > 0'>

        <h3>All TV Shows:</h3>

        <hr>

        <ul>

            <li ng-repeat="allshow in allshows | filter: searchbar">

                 allshow.name 
                <img  src="img/artwork/ allshow.image_name .png" style="width:50px;height:50px;">

            </li>

        </ul>

        <hr>

    </div>

</div>

===================== 在一些答案之后,这就是我从它们中创建的。现在效果很好!

<div ng-controller="SearchController">

    <div ng-hide='searchbar'>

        <h3>Please search something</h3>

    </div>

    <div ng-show='searchbar'>

        <div ng-show="(filtered = (shows | filter:searchbar)).length > 0"> 

            <h3>Shows you've seen:</h3>

            <hr>

            <ul>

                <li ng-repeat="show in filtered">

                     show.name 
                    <img  src="img/artwork/ show.image_name .png" style="width:50px;height:50px;">

                </li>

            </ul>

            <hr>

        </div>

         <div ng-show="(allfiltered = (allshows | filter:searchbar)).length > 0">

            <h3>All TV Shows:</h3>

            <hr>

            <ul>

                <li ng-repeat="allshow in allfiltered">

                     allshow.name 
                    <img  src="img/artwork/ allshow.image_name .png" style="width:50px;height:50px;">

                </li>

            </ul>

            <hr>

        </div>

    </div>

</div>

【问题讨论】:

【参考方案1】:

你可以的

<div ng-show="(shows|filter:searchbar).length > 0"> 

// content

</div> 

但这有一个性能问题(多次使用过滤器)。也看看这个How to display length of filtered ng-repeat data

【讨论】:

我已经为我的代码重新创建了它并用它更新了问题。谢谢! :-)【参考方案2】:

请查看工作示例http://jsbin.com/nusoc/1/edit

您可以在中继器中创建 filterdShowsfilteredAllshows 并在 ng-show 指令中使用它 即:

<div ng-show='filterdShows.length > 0'>

        <h3>Shows you've seen:</h3>

        <hr>

        <ul>

            <li ng-repeat="show in filterdShows = (shows | filter: searchbar)">

                 show.name 
                <img  src="img/artwork/ show.image_name .png" style="width:50px;height:50px;">

            </li>

        </ul>

        <hr>

    </div>

【讨论】:

【参考方案3】:

如果我正确理解任务,您应该将ng-show='shows.length &gt; 0' 替换为ng-show='searchbar'

【讨论】:

这在搜索栏为空时有效,但我也希望它们在找不到结果时消失。

以上是关于Ng-显示过滤后的搜索是不是为空?的主要内容,如果未能解决你的问题,请参考以下文章

Angular js - 如果 ng-repeat 为空则显示消息

过滤的 ng-repeat 中的对象数 [重复]

角度获取过滤后的 ng-repeat 的长度

在搜索期间重新加载 UITableView

ng-repeat过滤器,在过滤器删除了对象时显示消息

html 用ng-repeat过滤和搜索