当前位置: 首页 > 知识库问答 >
问题:

用ng-if重复,在ng-if中重复超过它应该重复的次数

壤驷宏才
2023-03-14

我需要一个数据列表,该列表通过其定义的属性(监控)进行过滤,我不能只执行以下操作:

ng-if="project.monitored"

因为我需要计算未受监控的。

对于这个示例,我简化了从getProjects()返回的数据,通常是:

this.projects = {
    "owned": [
        {
            "name": "project-1",
            "monitored": true
        },
        {
            "name": "project-2",
            "monitored": true
        }
    ],
    "John Doe": [
        {
            "name": "project-3",
            "monitored": true
        },
        {
            "name": "project-4",
            "monitored": false
        }
    ]
};

我将首先遍历this.projects.owner,然后遍历模板中的其余部分。此处未监控的总数将等于1。

所以我想我不能用这种方法

例子:

样板

<div ng-init="getProjects()">
    <div ng-if="vm.isMonitored(project.name)" ng-repeat="project in vm.projects">{{ project.name }}</div>  
</div>

控制器:

getProjects(){

    console.log('init');

    this.projects = {
        {
            "name": "project-1",
            "monitored": true
        },
        {
            "name": "project-2",
            "monitored": true
        }
    };

}

isMonitored(name) {

    console.log('Name :'+name);

    return true;

}

模板正确显示了2个结果:

项目1项目2

但console.log:

init
dashboard.controller.js?e45c:217 Name :project-1
dashboard.controller.js?e45c:217 Name :project-2
dashboard.controller.js?e45c:217 Name :project-1
dashboard.controller.js?e45c:217 Name :project-2
dashboard.controller.js?e45c:217 Name :project-1
dashboard.controller.js?e45c:217 Name :project-2

因此,我无法理解为什么在模板上显示的结果是正确的情况下,console.log中有如此多的副本。

因此,如果我在ng-if中计算任何东西,结果将是错误的。为什么啊?有什么解决办法吗?

共有1个答案

齐磊
2023-03-14

在每个摘要循环中,AngularJS将重新评估注册的观察者(因此您的vm.is监控(project.name))。这就是为什么你的控制台会多次显示日志。

使用ng if时,使用的值必须是布尔值或返回布尔值的方法。你不能用这种方法做生意,因为AngularJS的麦加主义。好的方面是,你的观点应该是:

<div ng-if="project.monitored" ng-repeat="project in vm.projects">{{ project.name }}</div>
 类似资料:
  • 我试图理解ng-if和作用域。正如我所知,ng-if创建了一个新的子作用域。以下是我的问题: 我的问题是,在这两种情况下(true或false)我都无法访问someValue2。我怎么能做到这一点?

  • 问题内容: 如何在Javascript中使用ng-repeat之类 的 ? 例: 我想用ng-repeat重复4次,但是我该怎么做呢? 问题答案: Angular带有limitTo:limit过滤器,它支持限制前x个项目和后x个项目:

  • 我是新来的ReactJS。在我的索引页上,loginState的初始状态 但是我的控制台在设置状态之后,两个modalStatus都打印为false。我做错什么了吗?请引导我。如果有任何帮助,我将不胜感激。

  • 问题内容: 有没有一种方法可以定义次数,而不必总是遍历数组? 例如,在下面,我希望列表项显示5次,并假设等于5,并且增加数字,因此每个列表项都按1、2、3、4、5递增 所需结果: 问题答案: 较新版本的AngularJS(> = 1.3.0)允许您仅使用变量(无需功能)来执行此操作: 在首次提出问题时这是不可能的。感谢@Nikhil Nambiar从下面的回答中获得此更新 原创(5/29/2013

  • 我有一个非常简单的代码。,当值正确时将显示输入。但是不起作用,我在pre中没有看到任何东西

  • 我试图用ng repeat in Angular来重复一个多维数组的子数组。我的json对象是这样的: 我尝试了这样的东西: 然后在这个孩子的表中: