2016-12-06 30 views
0

我使用input = text字段的表,並且當某些字段的id爲'4'時,我需要禁用整行。爲此,我嘗試使用此功能:在angularjs中禁用表格行

$scope.disableIfRowHasFour = function(row){ 
    var result = row.filter(function(field){ 
     return field.id === 'four'; 
    }) 

    return result.length !== 0; 
    }; 

和HTML:

<tr ng-disabled='disableIfRowHasFour(row)' ng-repeat='row in tableFields'> 
    <td ng-repeat='field in row'> 
    <input type="text" value='{{field.value}}'> 
    </td> 
</tr> 

和devtools我看到禁用行,但此行中輸入 - 不。

<tr ng-disabled="disableIfRowHasFour(row)" ng-repeat="row in tableFields" class="ng-scope" disabled="disabled"> 

我在哪裏錯了?我預計,在一行中的所有項目將被禁用.. Plnkr example

+1

您應該在輸入上添加ng-disabled標籤而不是tr –

+0

是的,但是如果id = 4只有1個輸入,我該如何禁用一行中的所有字段? – YoroDiallo

+1

在輸入中添加ng-disabled ='disableIfRowHasFour(row)'。它應該工作 –

回答

1

tr標籤採用NG-init初始化有殘疾值的變量:

<tr ng-init='rowDisabled=disableIfRowHasFour(row)' ng-repeat='row in tableFields'> 

而且在輸入您添加ng-disabled

<input type="text" value='{{field.value}}' ng-disabled="rowDisabled"> 
+0

我認爲這是行不通的,因爲rowDisabled將是所有行中共享的變量,因此如果最後一個具有四個變量,並且如果最後一個具有不同於四個的變量,則爲true。但是,我不確定變量的範圍。 –

+1

ng-repeat中的每個元素都有其自己的範圍,因此它將起作用 – harishr

+0

是的,它也可以工作,thx!這是更快,然後「ng-disabled ='disableIfRowHasFour(row)'on the input」?或者它沒有關係? – YoroDiallo