【问题标题】:ng-repeat to show each elements individuallyng-repeat 分别显示每个元素
【发布时间】:2017-10-11 20:07:08
【问题描述】:

我正在开发 angularjs 应用程序。

请找到演示:http://plnkr.co/edit/77CLq8lB0livmtCXLTKa?p=preview

如前 3 个 div 的演示中所示,它每 5 秒显示一次 div 值,同样我想为使用 ng-repeat 的 div 调用 detailsController 显示。我想以 5 秒的延迟显示 ng-repeat 的每个元素,如前 3 个 div 所示。

下面是示例html代码

<div ng-controller="MainController" style="width: 100%">
  <div ng-if="show==1">
    11111111111
  </div>

  <div ng-if="show==2">
    2222222222
  </div>

  <div ng-if="show==3">
    333333333
  </div>

  <div ng-if="show==4" ng-controller="detailsController">
    <div ng-repeat="detail in details">
      {{detail.name}} {{$index}} <br> DetailList : {{detailsList}}
    </div>
  </div>
</div>

如前 3 个 div 的演示中所示,它显示为幻灯片,每个都有 5 秒的延迟。 同样,我想显示列表中的每个元素,使用 ng-repeat 进行迭代,延迟 5 秒,而不是显示列表中的所有元素,如演示中所示。 任何建议都会有所帮助。

【问题讨论】:

  • 换句话说,您想构建一个每 5 秒循环一次的轮播?
  • 不完全是..但如果您查看前 3 个 div,它已经显示每个 div 的值延迟 5 秒。我想为 div4 显示相同的方式,它调用 detailsController 并使用 ng-repeat 显示元素。我想以 5 秒延迟显示 ng-repeat 的每个元素,如前 3 个 div 所示。@nicooga
  • 如果我理解正确,你不需要重复你的项目来做到这一点。您可以只拥有一个 div 和一个 ng-model,其值在控制器端每 5 秒替换一次。这很容易使用数组和几个调用来设置超时
  • @Felipe - 我认为我应该迭代列表以显示数组中的元素,所以我正在使用 ng-repeat。如果可能的话,您能否根据您的建议修改 plnkr 跨度>
  • @user8727958 这就是我的意思plnkr.co/edit/8CmjlKVJLLWpmYmV1djR?p=preview

标签: javascript html angularjs


【解决方案1】:

您可以检查show == $index

<div ng-repeat="detail in details">
   <div ng-if="show==$index">
      {{detail.name}} {{$index}} <br>
      DetailList : {{detailsList}}
   </div>
</div>

http://plnkr.co/edit/5OvcToWEVFidrDnk9NTo?p=preview

【讨论】:

  • 请找到更新后的plnkr.co/edit/HaRhHS6RlFc8FudQMoyR?p=preview,它不适用于演示中提到的场景..@Adriani6
  • 什么场景?什么演示?您在此处发布的问题已得到解答(“我想以 5 秒的延迟显示 ng-repeat 的每个元素,如前 3 个 div 所示。”)
【解决方案2】:

您需要将detailsList 变量存储在$rootScope 中,然后在模板中使用{{details[detailsList].name}}。在MainController 的同一区间内更新detailsList。不要为此使用两个单独的时间间隔,因为它们同时运行,因此您看不到更新。

这是一个有效的plunkr demo

index.html

<div ng-if="show==4" ng-controller="detailsController">
    <div>
        {{details[detailsList].name}}
    </div>
</div>

app.js

app.controller('MainController', function($scope,$rootScope, $interval) {
    $scope.show = 1;
    $scope.slide = "sample clise";
    $rootScope.detailsList = 0;

    $interval(function() {
        if ($scope.show === 4) {
            if ($rootScope.detailsList < 2) {
                ++$rootScope.detailsList;
            } else {
                $rootScope.detailsList = 0;
                $scope.show = 1;
            }
        }
        else if ($scope.show < 4) {
            ++$scope.show; 
        } else {
            $scope.show = 1;
        }
    }, 5000, 0);
});

【讨论】:

  • @user8727958 好的,我现在明白了。我已编辑我的答案以正确回答您的问题。我更新了我的 plunkr 链接以显示正确的示例。这里又是链接:plnkr.co/edit/mAmvZmjXymtDod02fTyO?p=preview
  • 感谢输入,如果列表大小为零,如何跳过显示空 div 的间隔,如演示中所示 plnkr.co/edit/iF1P2TUIDgezt1Kyzvtp?p=preview 。当调用 ng-controller="detailsController" 时,列表大小是零,所以我不想在 5 秒内显示空 div,如果当前要显示大小的 div 为零,则移动到其他 div。有输入吗?
猜你喜欢
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多