0
<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>

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

4

1 回答 1

2

我认为ng-init只有在编译元素时才会执行,所以你getdata()只会在表格出现时被调用。这是您键入时发生的情况:

  1. 空白search:显示表格,getdata()调用
  2. 类型“a”:表被隐藏,getdata()不被调用
  3. 类型“b”:表仍然隐藏,未getdata()调用
  4. 类型'c':显示表,getdata()被调用
  5. 类型 'd':表格仍然显示,因此getdata()不被调用
  6. 以此类推,ng-init直到表格再次隐藏并由ng-if

如果你有 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();
    }
}
于 2014-08-07T19:33:32.417 回答