You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS ng-repeat内ng-if异常:点击按钮隐藏所有div问题

解决点击删除按钮后所有ng-repeat项同时隐藏的问题

嘿,我太懂你这个困扰了!你现在的问题根源很清晰——你用了一个全局的$scope.showDetails变量来控制所有循环项的显示状态,所以一旦你把它改成1,所有ng-repeat生成的div都会一起隐藏,这肯定不是你想要的效果。

要实现“只隐藏当前点击的那一项”,关键是给每个循环的suggestions对象单独绑定自己的显示状态,而不是共用一个全局变量。下面是具体的修改方案:

第一步:修改JS代码

把全局的showDetails变量删掉,让delete函数直接操作当前点击的suggestion对象:

// 移除全局的$scope.showDetails = 0;
$scope.delete = function(suggestion, event) {
    // 如果需要使用event对象,比如获取DOM元素,可以保留event参数
    if(event) {
        alert(event.target.id);
    }
    // 直接操作当前suggestion的showDetails属性,控制它自己的显示
    suggestion.showDetails = 1;
    
    // 这里放你的AJAX调用和其他删除逻辑
};

第二步:修改HTML代码

把ng-if的判断条件改成当前suggestion的showDetails,同时在ng-click里把当前循环项传进去:

<div ng-repeat="suggestion in suggestions">
    <div class="col-xs-12 alert alert-info" ng-if="!suggestion.showDetails || suggestion.showDetails === 0">
        <center>
            <a ng-click="delete(suggestion, $event)" id="{{suggestion.id}}" class="btn btn-danger">
                <font size="4">
                    <i class="fa fa-times-circle"></i>
                </font> Delete
            </a>
        </center>
    </div>
</div>

为什么这样改能解决问题?

每个通过ng-repeat循环出来的suggestion都是独立的对象,当你给它添加showDetails属性后,修改这个属性只会影响当前项的显示状态,不会牵连其他循环项。如果你的原始suggestions数组里没有showDetails属性也没关系,Angular会自动为每个对象添加这个属性,不会影响你原有数据的结构。

如果后续你想恢复显示某一项,只需要把对应suggestion的showDetails改回0就可以啦!

内容的提问来源于stack exchange,提问作者Roxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:03:10