【问题标题】:How to use the value returned from foreach in ng-repeat using angularjs?如何使用angularjs在ng-repeat中使用foreach返回的值?
【发布时间】:2024-05-29 11:55:02
【问题描述】:

如果字段 seconddate 大于 firstdate,我需要显示该字段,否则不应显示第二个字段。日期格式为 dd mmm yyyy(例如,2017 年 11 月 22 日)。该函数返回真或假。但不知道如何在 ng-repeat 中传递它。如果我把这个函数放在 ng-if 中,它什么也不返回。任何帮助将不胜感激。下面是代码:

Json:

GetDetails:
{
    Displaydetails:
    {
        employees: [
                {
                    "name" : "Anu",
                    "city" : "abc",
                    "firstdate" : "12 Dec 2004",
                    "seconddate" : "31 Nov 2014"
                },

                {
                    "name" : "Anu",
                    "city" : "abc",
                    "firstdate" : "12 Dec 2004",
                    "seconddate" : "31 Nov 2014"
                },

                {
                    "name" : "Anu",
                    "city" : "abc",
                    "firstdate" : "12 Dec 2004",
                    "seconddate" : "31 Nov 2014"
                },

                {
                    "name" : "Anu",
                    "city" : "abc",
                    "firstdate" : "12 Dec 2004",
                    "seconddate" : "31 Nov 2014"
                }

            ]
    }
}


HTML:

<div ngcontroller = "mycontroller as myctrl" ng-repeat="employee in myctrl.empdetails.employees">
    <div> 
        name
    </div>

    <div> 
        {{employee.name}}
    </div>

    <div> 
        city
    </div>

    <div> 
        {{employee.city}}
    </div>

    <div> 
        firstdate
    </div>

    <div> 
        {{employee.firstdate}}
    </div>
 <div  ng-if="employee.showdate()> 
    <div> 
        seconddate
    </div>

    <div ng-if="employee.keepgoing == true"> 
        {{employee.seconddate}}
    </div>

</div>

控制器:

function myController ($scope,$rootScope,myService)
{
    var ctrl = this;
    ctrl.initfunc = function()
    {
        myService.getempDetails().then(function()
        {
            ctrl.empdetails=myservice.empack;

        }

        ctrl.showdate =function()
        {
            var keepgoing = true;
            ctrl.dateval = ctrl.empdetails.employees;
            angular.forEach (dateval, function(value, key) 
            {
                var firstdateval = new Date (value.firstdate);
                var seconddaateval = new Date (value.seconddate);
                if(Date.parse(firstdateval) < Date.parse(seconddateval))
                {
                    keepgoing = true;
                }
                else
                {
                    keepgoing = false;

                }
            });
        }
    }
}

function myservice()
{
    this.getempDetails = function(req)
    {
        var request = {
            url:jsonfilepath,
           method: 'GET'
        }

        return this.makecall(request) . then(function(response)
        {
            var res = response.data;
            if(res)
            {
                this.empack = res.displaydetails.employees;
            }


        }
    }
}

【问题讨论】:

    标签: angularjs html


    【解决方案1】:

    据我了解,如果第二个日期大于第一个日期,则显示第二个日期

    html:

    <div ng-if="myctrl.showdate(employee)"> 
        <div> 
            seconddate
        </div>
    
        <div ng-bind="employee.seconddate"></div>
    </div>
    

    myctrl.showdate(employee) 将检查每个员工的第二个日期显示与否

    js

    ctrl.initfunc = function()
    {
        myService.getempDetails().then(function()
        {
            ctrl.empdetails=myservice.empack;
    
        }
    }
    ctrl.showdate = function(employee) {
        if (Date.parse(employee.firstdateval) < 
            Date.parse(employee.seconddateval)) {
            return true;
        }
        return false;
    }
    

    您可以在ctrl.initfunc 函数之外定义ctrl.showdate 函数

    【讨论】:

    • 非常感谢。它成功了。我还有一个基于此日期的查询,如何按降序显示所有详细信息。那就是最近的第二个日期细节应该是最重要的,其他细节应该在最重要的细节下面。如何将此值合并到按顺序过滤器中