24

我有一个对象:model.data

如果此对象有一系列问题并且该数组有多个元素,我如何禁用按钮?

我确实尝试过:

data-ng-disabled="model.questions.length > 0"

但这似乎根本不起作用。

4

5 回答 5

35

编辑根据帖子和评论修改答案

关于什么:

data-ng-disabled="checkQuestions()"

然后在你的控制器中:

$scope.checkQuestions = function() {
 if (model.questions.length > 1) { // your question said "more than one element"
   return true;
  }
  else {
   return false;
  }
};

真正归结为有多种方法可以完成这项任务。一个表达式、一个函数、一个绑定变量(如这里的各种响应所示)。如果它们都不起作用,则问题可能出在您的模型上。如果您可以清除一些不一致之处(请参阅我关于询问模型结构的评论......另外,您是否有兴趣在数组中有任何东西时禁用它,或者只有当数组中有多个东西时才禁用它? ),这将有助于解决这个问题。

这是一个显示所有三种方法的小提琴;你会看到它们都有效。将您的控制器与小提琴进行比较,看看它是否结合在一起。

http://jsfiddle.net/jlmcdonald/P8qjR/3/

于 2013-08-21T02:19:39.540 回答
25

您绝对可以使用表达式而不是函数。但是您可以检查数组是否为undefined.

<button ng-disabled="model.questions != undefined && model.questions.length > 0"></button>
于 2013-08-21T02:43:29.950 回答
2

我无法让@zsong 回答工作,我不想创建一个函数只是为了返回一个数组长度,所以我通过创建另一个返回 array.length 的范围变量来让它工作。

$scope.modelQuestionsLength = $scope.model.questions.length;

然后我可以做

<button ng-disabled="modelQuestionsLength > 0"></button>
于 2014-01-17T14:24:04.007 回答
0

我无法获得未定义的工作方式,所以如果其他人遇到麻烦,这对我有用:

<input ng-disabled="fieldsPermittedForEdit.indexOf('postDate') < 0">

在此示例中,我将禁用该字段,除非数组postDate中存在该字段。fieldsPermittedForEdit

于 2015-04-16T05:54:38.767 回答
0

创建一个模型,然后将其默认值设置为 false。如果您的数组长度不为空,则将其值更改为 true。随后将模型绑定到按钮的 ng-disabled 属性。

于 2013-08-21T02:39:38.513 回答