我正在尝试在我的数据上设置条件“过滤器”来控制用户体验。我想要做的是在一个重复内部使用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;
}
};
非常感谢任何指针,使用这些库对我来说是新的。谢谢!
答案 0 :(得分:1)
我认为你正在寻找类似的东西。您可以跟踪特定索引,ID或集合项引用,然后使用ng-if
或ng-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并且可以编辑。