Angular(和lodash)检查除当前索引之外的任何项是否具有value = true

时间:2014-12-23 17:10:49

标签: javascript angularjs lodash

我正在尝试在我的数据上设置条件“过滤器”来控制用户体验。我想要做的是在一个重复内部使用ng-if传递一个索引,如果其中的任何内容除了它自己的索引的值为onlyMe,则返回false,否则返回true。

所以,我有我的重复和ng - 如果是这样的话

<div class="row" ng-repeat="item in marketItemsTest2">
                                    <div class="col-xs-12" ng-if="aloneNow($index)" >

所以它传递给单独的now函数,该函数应传递true或false。我点击了其他地方,只会在数组中的每个项目上将onlyMe切换为true或false。这是一种过滤方式,但我认为这是有条理地过滤我想要的方式的最简单方法。

除非一个本身不具有Me = true的项目,否则它将会重新呈现。我认为通过索引将是跟踪它的最佳方式。我相信这样的东西可以用lodash,我只是不知道如何。我能说的最简单的方法是 - 我想查看对象,如果有任何项目只有Me = true,那么这不是我传递的当前索引,返回false,否则为true。这可能吗?

也许过滤器只通过Me = true删除索引传递?这是我的尝试。

$scope.aloneNow = function(index){
        //if no other 
        var here = _.findIndex($scope.marketItemsTest2, 'onlyMe');
        if(here == -1){
            return true;
        }else if(here == index){
            return true;
        }else{
            return false;
        }

    };

非常感谢任何指针,使用这些库对我来说是新的。谢谢!

2 个答案:

答案 0 :(得分:1)

我认为你正在寻找类似的东西。您可以跟踪特定索引,ID或集合项引用,然后使用ng-ifng-hide / ng-show来切换列表中的项目。 Here's a working demo

控制器:

app.controller('DemoCtrl', function() {
  this.items = [
    {label: 'mustachio'},
    {label: 'top hat'},
    {label: 'monacle'},
    {label: 'smart phone'},
    {label: 'watch'},
    {label: 'cane'}
  ];

  this.isolatedIndex = false;
});

查看:

<ul ng-controller="DemoCtrl as demo">
  <li ng-repeat="item in demo.items"
      ng-if="demo.isolatedIndex === false || $index === demo.isolatedIndex">
    <span>{{item.label}}</span>
    <a ng-show="demo.isolatedIndex === false"
       ng-click="demo.isolatedIndex = $index">
      only me
    </a>
    <a ng-hide="demo.isolatedIndex === false"
       ng-click="demo.isolatedIndex = false">
      all
    </a>
  </li>
</ul>

如果这个列表与#34; onlyMe&#34;内置的是你经常做的事情,你可能想要考虑在指令中包含功能。

答案 1 :(得分:0)

如果我正确理解您的问题并且您的模型中包含此属性,那么只需使用它就有标记。

查看

<div class="row" ng-repeat="item in marketItemsTest2">
   <div class="col-xs-12" ng-show="item.onlyMe" >
   </div>
   <a ng-click="setOnlyMe(item)">OnlyMe</a>
 </div>

<强>控制器

app.controller('Ctrl', ['$scope', function($scope){
     $scope.setOnlyMe = function (item){
            item.onlyMe = !item.onlyMe;
     };
}]);

这假设onlyMe是bool并且可以编辑。