【问题标题】:AngularJS: Filter and sort ng-repeat on data from FirebaseAngularJS:过滤和排序来自 Firebase 的数据的 ng-repeat
【发布时间】:2014-08-08 12:21:26
【问题描述】:

S这是一个 Angularjs ng-repeat 循环,其中 rssSources 是一个 JSON 数组。每个元素代表一个带有 RSS 提要参数的对象,例如标题、网址和标签。

<li ng-repeat="ssrc in rssSources | filter:qsources | filter:qsources2 | filter:isCategory | limitTo:140 | orderBy: 'atitle'"><a ng-click="selectModel(ssrc.aurl)" target="_blank">{{ssrc.atitle}}</a></li>

我可以这样过滤

<input type="text" ng-model="qsources" placeholder="Select Feed">

问题:只要在模板中定义了 rssSources - $scope.rssSources = [{}{}{}] - 使用输入进行过滤就可以工作,而 ng-repeat 中的其他过滤器也可以工作。

但是,一旦我从 Firebase 获得 rssSources,数据仍会显示,但过滤器都不起作用。另外,排序不起作用。

我找到了一种解决方法,至少可以将 ng-repeat 绑定到输入字段 - 它确实很难看,但它有效:

ng-repeat="ssrc in rssSources" ng-show='ssrc.atags.indexOf(qsources) > -1 || qsources == undefined'

寻找干净的 AngularJS-ish 解决方案。这里缺少一些基本的东西来使 Firebase 中的数据源可过滤和可排序。

【问题讨论】:

  • 过滤器太多了。其中每一个都涉及迭代所有数据并创建一个新数组。您可能希望将这些组合成一个自定义查询并自己完成这项工作以提高效率。
  • 感谢您的调查,我认为这是正确的。我对 AngularJ 和一般的 MVC 思维非常陌生。因此,我倾向于在视图中包含太多逻辑。正在努力!

标签: angularjs filter angularjs-ng-repeat firebase ng-repeat


【解决方案1】:

您需要使用 orderByPriority 才能对您的数据应用过滤器,我猜它来自 Firebase。

试试这个:

<li ng-repeat="ssrc in rssSources | orderByPriority | filter:qsources | filter:qsources2 | filter:isCategory | limitTo:140 | orderBy: 'atitle'">

希望对你有帮助。

【讨论】:

  • 谢谢你,乔布萨缪尔。我已经尝试过了,但它会引发一个错误,我仍然需要解决。 Console.log: 错误: [$injector:unpr] errors.angularjs.org/1.2.16/$injector/… ngRepeat: ssrc in rssSources | orderByPriority |过滤器:qsources |过滤器:qsources2 |过滤器:isCategory |限制到:140 | orderBy: 'atitle' -->"rderByPriorityFilter
  • 您是否在 Angular 模块中包含 $firebase 作为依赖项?似乎缺少了这一点。
  • 不错@Jobsamuel!
  • 谢谢@Jobsamuel。目前我的模块是 ************ angular.module('feedReaderApp', []) .controller('RssFeedCtrl', [ '$http', '$interval', '$scope', '$sce', '$timeout', 函数($http, $interval, $scope, $sce, $firebase, $angularFire, $timeout) { .... ************ * 当像这样包含 firebase *********** angular.module('feedReaderApp', []) ********* 然后 console.log 说“未捕获的对象”并指向到函数 minErr(module) 处的 angular.js。
  • 对不起。应该是:当像这样包含firebase时 *********** angular.module('feedReaderApp', ['$firebase']) *********
猜你喜欢
  • 1970-01-01
  • 2013-05-09
  • 2016-06-04
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多