如何使用ngIf确定字符串对象数组是否为空?

时间:2019-05-31 18:24:41

标签: javascript arrays angularjs underscore.js

我必须编写一个代码,其中必须在两个列表之间传输一些项目,并且当要传输的对象文字数组不为空时,会隐藏错误。我创建了两个控制器(用于管理两个单独的列表)和一个用于处理通用数据的服务。在服务内部定义了一个列表以及一些用于将项目从一个列表转移到另一个列表的功能。数组大小似乎从未从0改变过,这是我要在ngIf中使用的逻辑。

我的逻辑是检查数组是否为空,如果数组为空,则返回true值,并在控制器中将变量设置为空。然后在ng-if中,我将检查ng-if =“ b.empty”并认为这可以工作,但没有成功。在我的代码的整个生命周期中,数组大小都将保持为0。我使用了._isEmpty(list),angular([],[])和最明显的array.length,但问题是最初它们显示为0,但是数组大小从未改变。即使在填充目标数组后,上述任何/所有函数/方法的大小似乎都保持为0。

l1.$inject = ['listService']
function l1(listService){
    var buying = this;
    buying.items = listService.display();
    buying.Add = function ($index){
        listService.addItem($index);
    }
};    //This is the controller for the source array.
.
.
.
bought.empty = listService.checkIfFull();   //Part of the second controller which assigns empty a boolean value
.
.
.
service.checkIfFull = function (){
    if(blist.length == 0){
        console.log(_.isEmpty(blist))
        console.log(tblist)
        return false;
    }
    else
    {
        console.log("not going here");
        return true;
    }
};    //The service checks if the array is empty
<div class="emptyMessage" ng-if="b.empty">Nothing bought</div> 

console.log语句的值似乎也仅在if语句的真实部分中执行。我找到了一个解决方案,就是简单地检查html标记本身,如果本地列表的长度等于零(并且我正在循环遍历ng-repeat)等于零并且可以正常工作。但是,请您解释一下为什么我的尝试是错误的?我通常是AngularJs和JS的初学者,因此我可能不了解有关js的一些规则,因此编写了错误的代码。谢谢。

1 个答案:

答案 0 :(得分:0)

您的问题是由bought.empty = listService.checkIfFull();行引起的。在那里,您正在调用函数listService.checkIfFull()并将返回的值分配给bought.empty。您应该做的就是将函数本身分配给bought.empty

bought.empty = listService.checkIfFull;

这样,每次评估bought.empty时,它都会返回当前的实际值。

编辑:

我将更明确地说明bought.empty = listService.checkIfFull()bought.empty = listService.checkIfFull之间的区别。

第一种方法,bought.empty将调用listService.checkIfFull()并将返回值存储为静态值,并且每当对变量求值时,该值都将相同。

通过使用另一种方法,bought.empty的值不是数字,而是listService.checkIfFull函数本身。这样,每次AngularJS评估变量时,函数都会执行并返回相应的值。