当前位置: 首页 > 面试题库 >

没有ng-repeat的角度过滤器列表

巫马曜文
2023-03-14
问题内容

有没有什么好方法可以使用angular过滤列表而不使用ng-
repeat?我不想首先使用javascript绘制列表,但是之后我想使用angular对其进行过滤。

例:

<input type="search" ng-model="search" placeholder="Search for fruits!" />



<ul>

  <li>Banana</li>

  <li>Apple</li>

  <li>Orange</li>

</ul>

我想使用搜索框来过滤现有的html。

(一般请不要使用ng-repeat或jQuery给出任何示例)


问题答案:

您可以编写一个简单的指令来处理显示/隐藏:

app.directive('filterList', function($timeout) {
    return {
        link: function(scope, element, attrs) {

            var li = Array.prototype.slice.call(element[0].children);

            function filterBy(value) {
                li.forEach(function(el) {
                    el.className = el.textContent.toLowerCase().indexOf(value.toLowerCase()) !== -1 ? '' : 'ng-hide';
                });
            }

            scope.$watch(attrs.filterList, function(newVal, oldVal) {
                if (newVal !== oldVal) {
                    filterBy(newVal);
                }
            });
        }
    };
});

并以这种方式使用它:

<input type="search" ng-model="search" placeholder="Search for fruits!" /> {{search}}

<ul filter-list="search">
    <li>Banana</li>
    <li>Apple</li>
    <li>Orange</li>
</ul>

使用指令有两个好处:

1)。您不必ngShow/ngIf在每个上放置任何指令li

2)。它还将与li列表中新添加的元素一起使用。

演示:http://plnkr.co/edit/wpqlYkKeUTfR5TjVEEr4?p
= preview



 类似资料:
  • 问题内容: 我想知道Angular中是否有一种简单的方法,可以使用特定的列(而非逻辑)来过滤表。现在,当我的过滤器实际上只需要过滤2列数据(ID和Name)时,它就会搜索表中的所有内容(10列以上的数据)。 我设法使它仅在过滤时仅查看这两列(通过根据文档在过滤器表达式中使用一个对象并查看此SO答案,但是它使用的是逻辑,太具体了。我想让它使用逻辑,但是遇到了麻烦。 我的HTML 我的过滤逻辑: 过滤

  • 问题内容: 我有一些要从json文件加载的html数据。 我通过在应用程序中使用ngSanitize并使用ng-bind-html来显示此html数据。 现在我想从标准转换json blob中的任何链接 至: 。 所以我在json文件上做了一些regExp来转换链接,但是出于某种原因,但是ng-bind-html过滤掉了ng- click的输出,我不知道为什么。是否应该这样做,如果可以,可以禁用此

  • 基本上,我有一个项目列表和一个用于过滤位于弹出侧抽屉中的列表的输入控件。 工作得很好,直到我添加了一个指令,当输入控件变得可见时,将焦点设置为该输入控件。然后焦点工作,但滤镜停止工作。没有错误。从标记中删除focus=“{{open}}”可以使筛选器工作。 焦点方法取自这篇StackOverflow文章:如何在输入字段上设置焦点? 这是代码... 谢了!萨德

  • 问题内容: 我是AngularJS的新手,我正在构建一个小型的概念验证租车清单应用程序,该应用程序会提取一些JSON,并通过ng- repeat并使用几个过滤器来呈现这些数据的各个部分: 现在,我想在控制器中创建一个自定义过滤器,该过滤器可以迭代ng-repeat中的项目,并仅返回满足特定条件的项目-例如,我可以根据哪个“ provider”复选框创建值数组进行检查,然后评估每个ng-repeat

  • 问题内容: 我想在Angular中使用ng-repeat,而我只想输出数组的某些元素。一个例子: 但是,这不起作用。请告诉我该怎么做;仅输出元素的精确索引。 问题答案: 在您的代码中,过滤器应用于“ items”数组,而不是应用于每个数组项,这就是为什么它无法按预期工作的原因。 相反,您可以使用ng-show(或ng-if): 请参阅:http://jsfiddle.net/H7d26 编辑:如果

  • 问题内容: 我有一个带有不同事件的JSON对象,如下所示: 该对象存储在我的控制器的$ scope.events中。 现在,我循环此数组以构建事件列表: 我的目标是每天将{{event.date}}作为列表分隔符显示一次。因此,在此示例中,它应如下所示: 2014-11-04(分隔线) 第一次进入 第二次进入 2014-11-05(分隔线) 第三次进入 2014-11-06(分隔线) 第四次进入