Angularjs:这种写作方式错了吗?

时间:2014-08-07 19:24:19

标签: angularjs binding angular-ng-if angularjs-ng-init

<input ng-model="search" type="text">
<table ng-if="search.length > 2 || search.length == 0" 
       ng-init="somerows = getdata()">
   <tr ng-repeat="row in somerows | filter:search">...</tr>
</table>

有时它会更快地思考这种*视觉方式 但这是错的吗?

1 个答案:

答案 0 :(得分:2)

我认为ng-init仅在编译元素时执行,因此只有在表出现时才会调用getdata()。输入时会发生以下情况:

  1. 空白search:显示表格,getdata()名为
  2. 输入'a':表格已隐藏,getdata()未被称为
  3. 输入'b':表格仍然隐藏,getdata()未调用
  4. 输入'c':显示表格,getdata()称为
  5. 输入'd':表格仍然显示,因此getdata()不会被称为
  6. 依此类推,ng-init将不再执行,直到该表再次被隐藏并由ng-if重新显示
  7. 如果您有10个字符并使用CTRL + X来剪切它们,则您的搜索字词为空,但仍未调用getdata(),因为仍然显示该表并且未执行ng-init。如果您粘贴了某些内容,则getdata()仍未调用,因为该表可见并且ng-init已被执行。

    我认为最好先查看搜索字词,然后致电getdata()

    $scope.$watch('search', function(newValue) {
        if (typeof(newValue) === "string" && 
                  (newValue.length == 0 || newValue.length > 2)) {
            $scope.getdata();
        }
    }