2016-04-28 48 views
0

我在html頁面中有多個表單,每個表單執行一些操作,如添加,編輯。在一個表單中進行修改時,ng-disabled引發的所有表單驗證

每個表格都有ng-disabled指令,它檢查某些條件,並在發生某些更改時觸發相應的禁用ng函數。

問題是,當一個表單中的值發生改變時,它會觸發所有表單的禁用ng函數。

代碼:

<body ng-controller="MainCtrl"> 
    <div ng-form="myForm"> 
     <input type="text" required ng-model="user.name" placeholder="Username"> 

     <button ng-click="doSomething()" ng-disabled="check() || myForm.$invalid">DO</button> 
    </div> 

    <div ng-form="myForm2"> 
     <input type="text" required ng-model="user.name2" placeholder="Username"> 

     <button ng-click="doSomething2()" ng-disabled="check2() || myForm2.$invalid">DO</button> 
    </div> 

    </body> 

Script代碼:

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 

    $scope.check = function() { 
    console.log("check called"); 
    } 

    $scope.check2 = function() { 
    console.info("check two called"); 
    } 

}); 

Plnkr link

你可以看到在控制檯運行所有功能時的一個模式的轉變。

+1

爲什麼這是一個問題? Angular會在每個[摘要](https://www.ng-book.com/p/The-Digest-Loop-and-apply/)循環中檢查函數的值,以查看是否需要禁用該按鈕 – yarons

回答

0

我認爲這是一種正常行爲。 ng-disabled中的條件在每次模型更改時都會重新執行。因此,每次在輸入中鍵入內容時,都會得到2 console.log。然後,如果函數的返回值爲true,則會禁用您的組件,否則會啓用它。