【问题标题】:AngularJS & Rails Recommendation Needed需要 AngularJS 和 Rails 推荐
【发布时间】:2014-12-17 03:07:49
【问题描述】:

我目前正在用 Rails 构建一个网站,但希望将 AngularJS 用于以下用途:

在 2 种不同类型的数据中快速排序(例如,单击列表中的不同餐厅,然后单击列表中的不同食物类别并查看所有结果)

搜索餐馆、食品类别和食品。

识别“kids”是否包含在食品项目中并用布尔值显示。

经过大量研究,我还没有成功找到任何适合我需要的优秀文章/项目。主要是因为我也想使用javascript而不是coffeescript。如果有人有任何可以帮助我的资源或想法,请发送。

现在我查看了以下内容:

https://www.honeybadger.io/blog/2013/12/11/beginners-guide-to-angular-js-rails https://egghead.io/lessons/angularjs-rails-todo-api-part-1

【问题讨论】:

    标签: javascript ruby-on-rails angularjs


    【解决方案1】:

    我根据这个小提琴创建了一个类似于您所描述的角度过滤器,并在它来自的线程的一些帮助下。希望这些对你有用...

    http://jsfiddle.net/rzgWr/19/

    Filter Array Using Checkboxes with AngularJS

    var myApp = angular.module('myApp',[]);
    
    var uniqueItems = function (data, key) {
    var result = [];
    
    for (var i = 0; i < data.length; i++) {
        var value = data[i][key];
    
        if (result.indexOf(value) == -1) {
            result.push(value);
        }
    
    }
    return result;
    };
    
    function MyCtrl($scope, filterFilter) {
    $scope.usePants = {};
    $scope.useShirts = {};
    $scope.useShoes = {};
    
    $scope.players = [
        {name: 'Bruce Wayne', shirt: 'XXL', pants: '42', shoes: '12'},
        {name: 'Wayne Gretzky', shirt: 'XL', pants: '38', shoes: '10'},
        {name: 'Michael Jordan', shirt: 'M', pants: '32', shoes: '9'},
        {name: 'Rodman', shirt: 'XSXL', pants: '42', shoes: '11'},
        {name: 'Jake Smitz', shirt: 'XXL', pants: '42', shoes: '12'},
        {name: 'Will Will', shirt: 'XXLL', pants: '42', shoes: '12'},
        {name: 'Youasdf Oukls', shirt: 'XL', pants: '38', shoes: '10'},
        {name: 'Sam Sneed', shirt: 'XL', pants: '38', shoes: '10'},
        {name: 'Bill Waxy', shirt: 'M', pants: '32', shoes: '9'},
        {name: 'Javier Xavior', shirt: 'M', pants: '32', shoes: '9'},
        {name: 'Bill Knight', shirt: 'M', pants: '32', shoes: '9'},        
        {name: 'One More', shirt: 'M', pants: '32', shoes: '9'},        
        {name: 'Player One', shirt: 'XXL', pants: '42', shoes: '11'},
        {name: 'Space Cadet', shirt: 'XXL', pants: '42', shoes: '12'},
        {name: 'Player Two', shirt: 'XXXXL', pants: '42', shoes: '12'}
    ]; 
    
    // Watch the pants that are selected
    $scope.$watch(function () {
        return {
            players: $scope.players,
            usePants: $scope.usePants,
            useShirts: $scope.useShirts,
            useShoes: $scope.useShoes
        }
    }, function (value) {
        var selected;
    
        $scope.count = function (prop, value) {
            return function (el) {
                return el[prop] == value;
            };
        };
    
        $scope.pantsGroup = uniqueItems($scope.players, 'pants');
        var filterAfterPants = [];        
        selected = false;
        for (var j in $scope.players) {
            var p = $scope.players[j];
            for (var i in $scope.usePants) {
                if ($scope.usePants[i]) {
                    selected = true;
                    if (i == p.pants) {
                        filterAfterPants.push(p);
                        break;
                    }
                }
            }        
        }
        if (!selected) {
            filterAfterPants = $scope.players;
        }
    
        $scope.shirtsGroup = uniqueItems($scope.players, 'shirt');
        var filterAfterShirts = [];        
        selected = false;
        for (var j in filterAfterPants) {
            var p = filterAfterPants[j];
            for (var i in $scope.useShirts) {
                if ($scope.useShirts[i]) {
                    selected = true;
                    if (i == p.shirt) {
                        filterAfterShirts.push(p);
                        break;
                    }
                }
            }       
        }
        if (!selected) {
            filterAfterShirts = filterAfterPants;
        }
    
        $scope.shoesGroup = uniqueItems($scope.players, 'shoes');
        var filterAfterShoes = [];        
        selected = false;
        for (var j in filterAfterShirts) {
            var p = filterAfterShirts[j];
            for (var i in $scope.useShoes) {
                if ($scope.useShoes[i]) {
                    selected = true;
                    if (i == p.shoes) {
                        filterAfterShoes.push(p);
                        break;
                    }
                }
            }    
        }
        if (!selected) {
            filterAfterShoes = filterAfterShirts;
        }        
    
        $scope.filteredPlayers = filterAfterShoes;        
    }, true);
    
    
    $scope.$watch('filtered', function (newValue) {
        if (angular.isArray(newValue)) {
            console.log(newValue.length);
        }
    }, true);    
    }
    
    myApp.filter('count', function() {
    return function(collection, key) {
      var out = "test";
      for (var i = 0; i < collection.length; i++) {
          //console.log(collection[i].pants);
          //var out = myApp.filter('filter')(collection[i].pants, "42", true);
      }
      return out;
    }
    });
    
    
    myApp.filter('groupBy',
            function () {
                return function (collection, key) {
                    if (collection === null) return;
                    return uniqueItems(collection, key);
        };
    });
    

    【讨论】:

    • 没问题!很高兴我能帮助你!当我制作过滤器时,我想从过滤器选项中排除某些字段,比如说您的菜单包含一组名为“主菜、开胃菜、汤、沙漠”的对象,并且您想从过滤器选项中排除沙漠,这里是一个线程的链接,我从一个关于如何使用自定义 Angular 过滤器stackoverflow.com/questions/25322035/… 的答案开始
    猜你喜欢
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多