Javascript 检查ng的值是否在数组中,如果在ng重复
我有一个ng重复循环,通过API检索的葡萄酒列表。我还有一个数组变量,其中包含所有已添加到从数据库获取的收藏夹中的葡萄酒ID。如果用户尚未从列表中添加特定结果,我希望能够显示“添加到收藏夹”按钮。要做到这一点,我想我应该做如下事情: HTML:Javascript 检查ng的值是否在数组中,如果在ng重复,javascript,angularjs,Javascript,Angularjs,我有一个ng重复循环,通过API检索的葡萄酒列表。我还有一个数组变量,其中包含所有已添加到从数据库获取的收藏夹中的葡萄酒ID。如果用户尚未从列表中添加特定结果,我希望能够显示“添加到收藏夹”按钮。要做到这一点,我想我应该做如下事情: HTML: 我不熟悉.indexOf(),所以我想这可能就是问题所在。但也许我错了。我想你必须改变 favorites.indexOf(wine.Id) !> -1 进入 favorites.indexOf(wine.Id)无效!只能与=、或布尔值一起使用。
我不熟悉.indexOf(),所以我想这可能就是问题所在。但也许我错了。我想你必须改变
favorites.indexOf(wine.Id) !> -1
进入
favorites.indexOf(wine.Id)<0
!>无效!只能与=、或布尔值一起使用。使用
favorites.indexOf(wine.Id) == -1
如果在数组中找不到元素,indexOf将返回-1。
谢谢你的更正。我被卡住了!> 我建议您将此逻辑移动到控制器,以保持视图尽可能干净:
$scope.isFavorites = function(id) {
return $scope.favorites.indexOf(id) !== -1;
}
你的观点应该是:
<!-- If wine.Id is not yet in the array of all favorite ids, display "Add Button" -->
<a href="#" class="btn btn-primary btn-dark" ng-click="addToFavorites(wine.Id)" ng-if="!isFavorites(wine.Id)">Add</a>
<!-- Else Display Already Added -->
<span ng-if="isFavorites(wine.Id)>Added</span>
favorites.indexOf(wine.Id)!>-1
看起来不像一个正确的角度表达式。注意,当模板中有表达式时,只允许使用一些基本的javascript条件。请参阅以了解可能的情况
与其拥有所有葡萄酒的列表和收藏葡萄酒的列表,不如使用布尔属性isFavorite
将列表扩展为所有葡萄酒。这对性能也有好处,因为它不需要每次迭代都在第二个列表中搜索葡萄酒
在响应回调循环中(快速和脏):
这样的数组操作可以使用或更优雅地完成
请注意,如果您有一个带有wines(id作为键)的对象,那么每次都可以通过id检索wines,而不是通过索引进行查找ngRepeat
支持与数组类似的对象
在模板中:
<!-- If wine.Id is not yet in the array of all favorite ids, display "Add Button" -->
<a href="#" class="btn btn-primary btn-dark" ng-click="addToFavorites(wine.Id)" ng-if="!wine.isFavorite"> Add </a>
<!-- Else Display Already Added -->
<span ng-if="wine.isFavorite">Added</span>
补充
您可以使用:
我想应该是我的最爱。indexOf(wine.Id)=-1
@Vohuman,K。托雷斯是对的。永远不会出现<-1的情况。indexOf永远不会返回小于-1的任何内容。正确,我的错误应该在这里是一个工作示例。请参考:)我正在接近,但现在它们都显示为错误。即使我在我的收藏夹数据库中输入了产品id。没关系!我必须将id值更改为字符串。id=id.toString()您应该能够跳过“| | false”,只需执行“return($scope.favorites.indexOf(id)>-1)”。稍微少一点代码:)
$scope.isFavorites = function(id) {
return $scope.favorites.indexOf(id) !== -1;
}
<!-- If wine.Id is not yet in the array of all favorite ids, display "Add Button" -->
<a href="#" class="btn btn-primary btn-dark" ng-click="addToFavorites(wine.Id)" ng-if="!isFavorites(wine.Id)">Add</a>
<!-- Else Display Already Added -->
<span ng-if="isFavorites(wine.Id)>Added</span>
var index = $scope.favorites.indexOf(r.id);
if(index > -1) {
$scope.favorites[index].isFavorite = true;
} // else isFavorite is undefined, which is falsy
<!-- If wine.Id is not yet in the array of all favorite ids, display "Add Button" -->
<a href="#" class="btn btn-primary btn-dark" ng-click="addToFavorites(wine.Id)" ng-if="!wine.isFavorite"> Add </a>
<!-- Else Display Already Added -->
<span ng-if="wine.isFavorite">Added</span>
<span ng-if="favorites | contains:wine.Id">Added</span>
angular.module('module').filter('contains', function() {
return function (array, needle) {
return array.indexOf(needle) >= 0;
};
});