【问题标题】:To display first few items in rss feed at collapse state在折叠状态下显示 rss 提要中的前几个项目
【发布时间】:2018-01-03 08:49:29
【问题描述】:

我的 cordova ionic 1 代码当前加载了所有 rss 提要,这导致我的页面太长,因为 rss 提要太多。

因此,我只想在预设(处于折叠状态)处显示前三个 rss 项。当点击“更多”时,它将展开并显示所有项目。再次点击,它将折叠并仅显示第一个 rss。

目前,没有任何 rss 项目显示为折叠状态。它以可展开状态显示所有内容。

我需要什么:

  1. 显示前三个 rss 项目,在折叠状态下按日期(最新在顶部)排序。

  2. 在可展开状态下显示所有 rss 项。

我的模板

<div class="card">
  <div class="item item-divider">RSS</div>

  <a class="item item-icon-right" ng-if='showmore' ng-repeat="item in rssNews| orderBy: 'pubDate':true" ng-click="openitems(item.link)">
    <h2>{{item.title}}</h2>
    <h6>{{item.pubDate}}</h6>
    <p {{story.description | htmlToPlaintext}}</p>
  </div>
  </a>
  <div ng-click="togglemore()" <i class="icon" ng-class="showmore ? 'ion-android-remove-circle assertive' : 'ion-android-add-circle positive'"></i><span class="padding" ng-bind="showmore ? 'Less' : 'More'"></span></div>
</div>

angularjs

$scope.showmore = false;
$scope.togglemore = function() {
  $scope.showmore = !$scope.showmore;
};

折叠条件。初始状态。(看蓝色的“+”号)。没有显示任何 rss。我希望显示前 3 个 rss 提要。

展开条件。它将显示所有 rss 提要。

例如,rss feeds 链接如下

https://www.google.com/finance/company_news?q=KLSE:AEON&ei=pKh8WfndJ9G8uQTKgKq4CQ&output=rss

另一个 JS

    $webServicesFactory.get(
      "https://www.google.com/finance/company_news",
      {},
      {
        output: "rss",
        q: 'KLSE' + ":" + 'AEON'
      }
    ).then(
      function success(xmlData) {
        var x2js = new X2JS();
        $globalFactory.personalStockNews = x2js.xml_str2json(xmlData).rss.channel.item;
        console.info($globalFactory.personalStockNews);
        $state.go("app.page");
      },
      function error(error) {
        $globalFactory.personalStockNews = null;
        $ionicLoading.hide();
        $state.go("app.page");
      }
    );
  },
  function error(error) {
    $ionicLoading.hide();
  }
);
$scope.rssNews = $globalFactory.personalStockNews;

如果您对什么是折叠和展开感到困惑,这就是示例。

http://jsfiddle.net/shengoo/6b0y3tar/

【问题讨论】:

  • 我认为您必须将容器的初始最大高度设置为列表中 3 个项目的高度,当您切换扩展变量时,您将最大高度设置为高于它的值会得到的。
  • @David 您能否详细说明或在 jsfiddle 中举例说明?
  • 我现在没有时间整理一些东西,但我认为手风琴列表 (joshmorony.com/creating-an-accordion-list-in-ionic) 上的 josh moronys 教程可能会有所帮助(我知道它是 angular2,但概念是一样的) .无需将折叠高度设置为 0,您只需将其设置为适合 3 个列表项的任何值。
  • 手风琴列表正在工作,如您所见,如图所示。就在它崩溃的时候,我想显示 3 个按日期排序的 rss 项目
  • 是的,这就是为什么我写了“与其将折叠高度设置为 0,不如将其设置为适合 3 个列表项的任何值”。

标签: html angularjs cordova ionic-framework


【解决方案1】:

Angular 自带一个limitTo:limit 过滤器,它支持限制前x 项和后x 项:

 <a class="item item-icon-right" ng-if='showmore' ng-repeat="item in rssNews| limitTo:1 | orderBy: 'pubDate':true" ng-click="openitems(item.link)">

您可以在documentation找到更多信息

【讨论】:

  • 展开后显示一个rss,折叠时什么也不显示。我想要的是在展开时显示全部,但在折叠时显示一个 rss 项。
  • 你能展示一个演示吗?我对 toggle() 有点困惑
  • 它只是一个简单的展开和折叠功能。喜欢多看少看
  • 抱歉,无法自己制作。但这是一个展开和折叠的例子jsfiddle.net/shengoo/6b0y3tar
  • 创建另一个简单的演示。点击越来越少。它假设展开和折叠列表(它不在演示中,因为没有 rss 项目)jsfiddle.net/afagx45b
【解决方案2】:

您可以按照@marco gomes 的建议使用limitTo。您最初可以将变量设置为 3,这将告诉 ng-repeat 默认情况下仅显示 3 个 rss 项目。但是当您切换到查看更多时,我们会将变量设置为数组的长度以显示所有 rss 项目。

HTML

<div class="card">
  <div class="item item-divider">RSS</div>

  <a class="item item-icon-right" ng-if='showmore' ng-repeat="item in rssNews| limitTo:count | orderBy: 'pubDate':true" ng-click="openitems(item.link)">
    <h2>{{item.title}}</h2>
    <h6>{{item.pubDate}}</h6>
    <p> {{story.description | htmlToPlaintext}}</p>
  </div>
   </a>
  <div ng-click="togglemore()"> <i class="icon" ng-class="{'showmore' ? 'ion-android-remove-circle assertive' : 'ion-android-add-circle positive'}"></i><span class="padding" ng-bind="showmore ? 'Less' : 'More'"></span></div>
</div>

JS

 $scope.count=3;
  $scope.showmore = false;
    $scope.togglemore = function(){
      $scope.showmore = !$scope.showmore;
      if($scope.showmore)
          $scope.count=$scope.rssNews.length;
      else
         $scope.count=3;
    };

工作示例http://jsfiddle.net/6b0y3tar/190/

【讨论】:

  • 嗨。它仍然和以前一样。初始状态(折叠)不显示任何 rss。我怀疑 rss 项目的内容根本没有加载。我想可能是带有 rss 提要的 jsfiddle 更容易查看。谢谢
  • rssNews 是一个对象数组吗?通过在视图 {{rssNews}} 中打印来检查 rssNews 是否包含数据。试试放调试器和控制台看看代码哪里出错了?
  • 是的,在对象数组中。 $scope.count=3 不起作用。如果$scope.count=$scope.rssNews.length; 更改为$scope.count=5;。展开时只会显示 5 条 RSS。所以$scope.count=$scope.rssNews.length; 工作正常。我不知道为什么$scope.count=3 在崩溃状态时不启动
  • 在折叠状态下你是否使用任何隐藏内容的css,也许是折叠视图的高度?尝试检查视图是否存在数据,它可能存在。
  • 嗨 Vivz,没有控制高度的 css。如果您的 jsfiddle 示例修改为使用 rss 链接 google.com/finance/…,它仍然有效吗?
【解决方案3】:

这是一个演示:http://jsfiddle.net/afagx45b/1/

我使用ng-repeat| limit to x 过滤器和一个简单的 ng-if 语句在 div 上知道是否单击了 show-more 或 show-less。您应该能够根据需要调整其余部分。

当 show-less 可见时: &lt;div ng-if="showmore" ng-repeat="group in groups | orderBy: 'date'"&gt; 并且显示更多是可见的: &lt;div ng-if="!showmore" ng-repeat="group in groups | orderBy: 'date' | limitTo:3"&gt;

编辑:更新以显示如何按日期排序,请查看 this thread 了解有关 orderBy 过滤器的更多信息。

【讨论】:

  • 斯科特。谢谢。它只显示前 3 个项目。但请参阅我的问题,第一个要求,我也需要它与日期排序。您显示的代码错过了这一点。 Orderby,只是不工作。可以补充一下吗?
  • 一旦你有真实的数据可以玩,这很容易,只需在你的 ng-repeat 中添加一个过滤器:像这样并将它指向你的日期项:| orderBy: 'created_at' 例如:ng-repeat="group in groups | orderBy: 'date'"&gt;
  • 斯科特。我原始代码中的ng-repeat="item in rssNews| orderBy: 'pubDate':true" 完成了相同的功能,但它没有排序。你可以试试我上面提供的 rss 链接
  • ng-repeat="item in rssNews | orderBy: 'pubDate'" 您可以使用 '-pubDate' 来颠倒顺序。如果你能做出一个正确重复过时项目的小提琴,我会帮你调整它。
  • 斯科特,对不起。尝试创建 jsfiddle 但无法工作。但是,我在一个示例中看到了代码,但不知道如何将其适配到我的 JS 中。你能帮忙吗。 stackoverflow.com/questions/45497903/…
猜你喜欢
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
相关资源
最近更新 更多