首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJs : ng-if重复,重复比在ng-if中重复的多。

AngularJs : ng-if重复,重复比在ng-if中重复的多。
EN

Stack Overflow用户
提问于 2015-12-22 10:28:38
回答 1查看 149关注 0票数 0

我需要一个由其定义的属性(监视)过滤的数据列表,我不能这样做:

代码语言:javascript
复制
ng-if="project.monitored"

因为我需要清点那些没有监控的。

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

代码语言:javascript
复制
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。

所以我想我不能使用这样的solution

示例:

模板

代码语言:javascript
复制
<div ng-init="getProjects()">
    <div ng-if="vm.isMonitored(project.name)" ng-repeat="project in vm.projects">{{ project.name }}</div>  
</div>

主计长:

代码语言:javascript
复制
getProjects(){

    console.log('init');

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

}

isMonitored(name) {

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

    return true;

}

模板正确地显示了两个结果:

项目-1项目-2

但是console.log:

代码语言:javascript
复制
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来计数,结果将是错误的。为什么?有什么解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-22 10:36:31

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

使用ng-if时,所使用的值必须是布尔值,或者返回布尔值的方法。由于AngularJS的机制,您不能在这种方法中进行业务工作。为了表现得好,你的观点应该是:

代码语言:javascript
复制
<div ng-if="project.monitored" ng-repeat="project in vm.projects">{{ project.name }}</div>

或者更好的是,您可以在控制器中筛选您的集合以优化ng-repeat工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34413652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档