如何使用 AngularJS 显示特定数量的 li?

Posted

技术标签:

【中文标题】如何使用 AngularJS 显示特定数量的 li?【英文标题】:How can show specific number of li using AngularJS? 【发布时间】:2016-09-07 23:35:07 【问题描述】:

我想显示 3 个li,1 秒后这 3 个li 将向上滑动,接下来的 3 个li 将自动显示在div.#content

<div id="content">
    <ul>
        <li>122</li>
        <li>first</li>
        <li>second</li>
        <li>third</li>
        <li>fourth</li>
        <li>fifth</li>
        <li>sixth</li>
    </ul>
</div>

我已经使用 jquery 完成了这件事,但我需要使用 angularJs 进行开发,而且我不是 angularjs 专家。 Here 你可以看到已经使用 jquery 完成了。如果有人指导我,我将不胜感激。

【问题讨论】:

你可以试试 $interval,它是 Angular 对 window.setInterval 的封装。请参阅官方文档。 This answer to a similar question 有一个指令,可以在没有 jQuery 的 Angular 中实现 .slideUp/Down。 【参考方案1】:

如果只是翻译,则运行 sn -p

(function ()

    var app = angular.module("app", []);

    function HomeController($interval)
    
        var vm = this;        
        var i = 2,
            $ul = angular.element('#content ul');
        int = $interval(function ()
            
                angular.element('li', $ul).slideUp();
                angular.element('li' + (i == -1 ? '' : ':gt(' + i + ')') + ':lt(3)', $ul).slideDown();
                i += 3;
                if (i + 1 >= angular.element('li', $ul).length) i = -1;
            ,
            2000);
    

    app.controller("HomeController", ["$interval",HomeController]);

)();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<!DOCTYPE html>
<html lang="en" ng-app="app">
    <head>
        <meta charset="UTF-8">
        <title>Angular JS App</title>        
    </head>
    <body>

        <div class="container" ng-controller="HomeController as homeCtrl">


            <div id="content">
                <ul>
                    <li>1</li>
                    <li>2</li>
                    <li>3</li>
                    <li>4</li>
                    <li>5</li>
                    <li>6</li>
                    <li>7</li>
                    <li>8</li>
                    <li>9</li>
                </ul>
            </div>           

        </div>
    </body>
</html>

【讨论】:

感谢分享知识它的工作,但我们可以删除 jquery,因为我不想使用 jquery。 问题是slideUp()和slideDown()都来自jQuery!【参考方案2】:

请通过这个plunkr。我删除了 jQuery,但使用了一些数学逻辑。

var i = 0;

    var mainList=[1,2,3,4,5,6,7,8,9];

    $scope.list = [mainList[i],mainList[i+1],mainList[i+2]];

    $ul = angular.element('#content ul');

    int = $interval(function ()
        
             if(i>8)
              i=0;
            
            $scope.list=[mainList[i],mainList[i+1],mainList[i+2]];
        ,
        2000);

【讨论】:

【参考方案3】:

试试这个:

angular.module('app', [])
    .directive('slideRoller',function($interval)
        return 
            restrict:'A',
            link:function(scope,ele,attrs)
                var interval = attrs.interval || 2000;
                var children = ele.find('li');

                var start = -1;
                roll(start);
                $interval(function()
                    start += 3;
                    if(start>=children.length-3)
                        start = -1;
                    
                    roll(start);
                ,interval);

                function roll(i)
                    angular.forEach(children,function(val,index)
                        if(index>i && index<=i+3)
                            angular.element(val).removeClass('slide-up').addClass('slide-down');
                        else
                            angular.element(val).removeClass('slide-down').addClass('slide-up');
                        
                    );
                
            
        
    )
;
.slide-up
	max-height: 0;
	overflow-y: hidden;


.slide-down 
	max-height: 10em;
	-webkit-transition: max-height 0.5s ease-in-out;
	-moz-transition: max-height 0.5s ease-in-out;
	-o-transition: max-height 0.5s ease-in-out;
	transition: max-height 0.5s ease-in-out;
<html>
<head>
    <title>Single Demo</title>
    <script src="//cdn.bootcss.com/angular.js/1.4.7/angular.js"></script>

</head>

<body ng-app="app">
    <div class="container">
        <ul slide-roller interval="1000">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
        </ul>
    </div>
</body>
</html>

【讨论】:

【参考方案4】:

这不是答案,只是给你的信息

如果你导入jQueryAngularJs 会实现它,所以使用jQuery 并没有错。

相反,如果你不想导入jQueryAngularJs 会退回到jQlite(真的类似于jQuery

来自官方文档:

Angular 是否使用 jQuery 库? 是的,如果在引导应用程序时,Angular 存在于您的应用程序中,则 Angular 可以使用 jQuery。如果 jQuery 不在您的脚本路径中,Angular 将回退到它自己的 jQuery 子集实现,我们称之为 jQLite。

Angular 1.3 仅支持 jQuery 2.1 或更高版本。 jQuery 1.7 和更新版本可能与 Angular 一起正常工作,但我们不保证这一点。

常见问题页面:https://docs.angularjs.org/misc/faq

Angular jqLit​​e:https://docs.angularjs.org/api/ng/function/angular.element

【讨论】:

我们可以同时使用 Jquery 和 angularjs 吗? @ayazkhan 是的...不过编码风格会有所不同。 你可以,你可以使用angular来做幻灯片效果,而不是jQuery(...).slideUp()你会使用angular.element(...).slideUp(),因为angular会从jQuery导入slideUp方法(它只有在你import jquery 或者 jqLit​​e 上存在这个方法)

以上是关于如何使用 AngularJS 显示特定数量的 li?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AngularJS 中显示占位符图像

如何在AngularJS中显示占位符图像

AngularJS ng-repeat rows/ul

如何使用 jQuery DataTables 从数据库中显示特定数量的 HTML 表中的项目?

在日期时间选择器AngularJs中的特定日期显示颜色

AngularJS:使用 css 过渡动画 ng-hide / ng-show li 的高度