获取AngularJS中的“下一个”和“上一个”项目?

时间:2014-09-22 13:59:52

标签: javascript angularjs

我点击时使用ngRoute将故事列表过滤到一个特定的故事中,如下所示:

myApp.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
    when('/stories', {
        templateUrl: '/partials/stories.html',
        controller: 'StoryListCtrl'
    }).
    when('/stories/:storyID', {
        templateUrl: '/partials/story.html',
        controller: 'StoryDetailCtrl'
    });
}]);

这很好用,但我怎样才能得到" next"和"之前"故事。用户需要能够在故事之间向左和向右滑动,但我不能简单地加载它们 - 我需要加载每个故事和其中任何一个故事。然后,当用户以任一方式滑动时,将删除一个故事并添加一个新故事。

Angular有可能吗?我已经疯狂搜索但无论如何都无法找到任何在线参考资料。

谢谢你的时间!

3 个答案:

答案 0 :(得分:2)

你可以使用角度ng-swipe。 例如比方说,你有这些文件如下。

<强> story.html

<div ng-swipe-left="nextStory()" ng-swipe-right="previousStory()" >
    {{storyID}}
</div>

<强> StoryDe​​tailCtrl

myApp.controller('StoryDetailCtrl', function ($scope, $routeParams, $location) {
    $scope.storyID = $routeParams.storyID;
    $scope.nextStory = function () {
            var storyID = $routeParams.storyID;
            var path = 'stories/' + (storyID + 1 );
            $location.path(path);
            //console.log("This is left Swipe.");
        };

        $scope.previousStory = function () {
            var storyID = $routeParams.storyID;            
            var path = 'stories/' + (storyID - 1 );}            
            $location.path(path);
            //console.log("This is right Swipe.");
        };
});
  

确保将ngTouch作为依赖项注入模块中,作为['ngTouch']

希望对你有意义。

答案 1 :(得分:1)

当用户滑动时,您需要发送一个包含当前ID和方向的查询,这样您知道的是下一个并且如果之前已经离开,则表示您可以查询

  

右:比当前ID高1:

     

左:比当前ID少<1>

     

无方向:只需加载当前ID

对于滑动,您也可以使用$swipe服务,ngSwipeLeft和ngSwipeRight。

你可以在路由/故事/:storyID执行之前解决一个函数,通过传递id和方向,或者你可以修改你的路线以支持方向,如/ stories /:storyID /:orientation和orientation可以为null

看看你可能有的这个article作为一个例子,我只是想强调如何计算当前页面和angularjs中的滑动功能,这可能适用于你的场景。

angular.module('website', ['ngAnimate', 'ngTouch'])
    .controller('MainCtrl', function ($scope) {
        /* Code omitted */

        $scope.direction = 'left';
        $scope.currentIndex = 0;

        $scope.setCurrentSlideIndex = function (index) {
            $scope.direction = (index > $scope.currentIndex) ? 'left' : 'right';
            $scope.currentIndex = index;
        };

        $scope.isCurrentSlideIndex = function (index) {
            return $scope.currentIndex === index;
        };

        $scope.prevSlide = function () {
            $scope.direction = 'left';
            $scope.currentIndex = ($scope.currentIndex < $scope.slides.length - 1) ? ++$scope.currentIndex : 0;
        };

        $scope.nextSlide = function () {
            $scope.direction = 'right';
            $scope.currentIndex = ($scope.currentIndex > 0) ? --$scope.currentIndex : $scope.slides.length - 1;
        };
    })

喝彩!

答案 2 :(得分:0)

假设您有/stories页面中显示的故事列表,现在使用<a ng-href="yourCtrl.getStoryHref()" />Full Story</a>;现在您转到显示完整故事的故事页面。 在这里你有上一个和下一个链接,它将带你到上一个/下一个故事 <a ng-href="yourCtrl.getNextStoryHref()" />Next Story</a><a ng-href="yourCtrl.getPrevStoryHref()" />Previous Story</a>

或者,如果您想在移动设备上使用它,可以使用ng-touch或fastclick。 在ng-touch中,您可以使用ng-swipe-leftng-swipe-right

<!-- Your Story Div -->
<div ng-swipe-right="yourCtrl.moveToNextStory">Content</div>

在控制器内的moveToNextStory函数中,将$ location.path设置为下一个故事的路径