Angularjs 安古拉鲁斯:这种书写方式错了吗? ...

Angularjs 安古拉鲁斯:这种书写方式错了吗? ...,angularjs,binding,angular-ng-if,angularjs-ng-init,Angularjs,Binding,Angular Ng If,Angularjs Ng Init,有时,这种*视觉方式会加快思考速度 但这是错的吗 我认为nginit只有在编译元素时才会执行,因此只有在表出现时才会调用getdata()。以下是键入时发生的情况: 空白search:显示表格,调用getdata() 类型“a”:表是隐藏的,getdata()未调用 类型“b”:表仍处于隐藏状态,getdata()未调用 类型“c”:显示表格,调用getdata() 类型“d”:仍然显示表,因此不会调用getdata() 以此类推,ng init将不会执行,直到该表再次隐藏并由ng if 如果您

有时,这种*视觉方式会加快思考速度

但这是错的吗

我认为
nginit
只有在编译元素时才会执行,因此只有在表出现时才会调用
getdata()
。以下是键入时发生的情况:

  • 空白
    search
    :显示表格,调用
    getdata()
  • 类型“a”:表是隐藏的,
    getdata()
    未调用
  • 类型“b”:表仍处于隐藏状态,
    getdata()
    未调用
  • 类型“c”:显示表格,调用
    getdata()
  • 类型“d”:仍然显示表,因此不会调用
    getdata()
  • 以此类推,
    ng init
    将不会执行,直到该表再次隐藏并由
    ng if
  • 如果您有10个字符,并按CTRL+X组合键进行剪切,则搜索项为空,但仍不会调用
    getdata()
    ,因为仍会显示该表,并且不会执行ng init。如果粘贴了某些内容,则仍然不会调用
    getdata()
    ,因为该表是可见的,并且已经执行了
    ng init

    我认为最好观察搜索词并调用
    getdata()
    ,然后:

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

    退房当if添加或删除元素时,会调用ng init,但如果您开始键入,则仅当您键入第三个字符时才会调用它,而不是在第三个字符之后,
    ng if
    实际添加或删除关联的DOM对象,这就是为什么
    ng init
    直到第三个字符才执行的原因,因为它实际上还不存在。
    $scope.$watch('search', function(newValue) {
        if (typeof(newValue) === "string" && 
                  (newValue.length == 0 || newValue.length > 2)) {
            $scope.getdata();
        }
    }