2014-12-06 67 views
0

如何判断ng-repeat是否显示1项?像,if ng-repeat items === 1: do something.如何判断Ng-Repeat是否打印了x项

<div ng-controller="mycontroller2"> 
<form ng-submit="submit()"> 
    {% csrf_token %} 
    Search by name: 
    <input ng-model="artistname" /> 
    <input type="submit" value="submit" /> 
</form> 
<table> 
    <tr ng-repeat="name in names | filter:artistname | limitTo:10"> 
     <!-- if number of "name" === 1 I want the form submitted --> 
     <td ng-hide="!artistname"> 
      <a href="" ng-click="submit()"> 
      {({ name })} 
      </a> 
     </td> 
    </tr> 
</table> 

此代码读取用户输入要显示的是提交表单的链接列表。我想要的是,当ng-repeat显示的艺术家姓名的初始列表降至1时,表单会自动提交,因为无论如何,在该点只能有一个数据库。

+0

从本质上讲,如果只有一个结果,你想自动提交表单?你能否提供一些关于你的用例的背景知识? – 2014-12-06 02:49:40

回答

0

我不得不结合几个答案才能得到我正在寻找的东西。下面的<div>元素使用ng-if和ng-init函数在剩下一个名字时提交表单。

<form ng-submit="submit()"> 
    {% csrf_token %} 
    Search by name: 
    <input ng-model="artistname" /> 
    <input type="submit" value="submit" /> 

    <div ng-if="(names | filter:artistname).length===1" ng-init="submit()"></div> 
</form> 

<table> 
    <tr ng-repeat="name in names | filter:artistname | limitTo:10"> 
     <td ng-hide="!artistname"> 
      <a href="" ng-click="submit()"> 
      {({ name })} 
      </a> 
     </td> 
    </tr> 
</table> 

现在,当ng-repeat过滤器中剩下一个名称时,表单自动提交。

1

您可以检查名字数组的长度是这样的:

<span ng-if="names.length === 1">Do something</span> 

只需添加NG-如果到了NG-重复,然后将有条件相同的元素。

更新:

你可以听逻辑使用$watch控制器:

$scope.$watch('names', function() { 
    if (names.length === 1) { 
    // Do something 
    } 
} 
+0

为什么“做某事”的部分必须是HTML?我需要ng - 如果调用'submit()'函数。 – 2014-12-06 06:21:33

+0

它没有。如果您需要角度世界中的逻辑,您可以观看“名称”属性进行更改并从那里开始。查看我的更新。 – risto 2014-12-06 06:28:24

0

这需要在控制器发生。

if ($scope.names.length === 1) $scope.submit() 
1

添加这样的事情在你的表单块:

<div ng-if="names.length == 1"> 
    <script type="text/javascript"> 
    $("#myform").submit(); 
    </script> 
</div> 
1

提供答案的Risto是沿着正确的路线,只是需要进行调整,以确定是否只有后一个值过滤器已应用于

<form ng-submit="submit()"> 
    {% csrf_token %} 
    Search by name: 
    <input ng-model="artistname" /> 
    <input type="submit" value="submit" 
      ng-disabled="(names | filter:artistname).length === 1" /> 
</form> 

过滤将改变显示元件的数量,但会没有t更改了names阵列的长度。

+0

当剩下1个名字时禁用我的提交按钮。我需要它来激活提交按钮。 – 2014-12-06 06:16:48

+0

您可以将禁用表达式的逻辑更改为任何业务规则指定的内容。 '> = 1''!== 1'' <= 1' – Brocco 2014-12-06 13:27:37

+0

虽然我不需要禁用任何东西。 – 2014-12-06 19:01:42

相关问题