2013-06-29 153 views
3

比方說,我們有這樣一個對象:AngularJS - 動態輸入的驗證字段

$scope.company = { name: { de: '', en: '' } }; 

和輸入字段說:

<input type="text" ng-model="company.name[currentLanguage]" /> 
<button ng-click="currentLanguage='de'">Deutsch</button> 
<button ng-click="currentLanguage='en'">English</button> 

如果用戶在這一領域填補,現場接收ng有效的類。如果用戶然後更改語言(實際上$ scope.currentLanguage),則輸入字段會正確更新(變空),但它仍然是類,這是不正確的。預期的行爲將會是ng-pristine。如何實時更新此信息?

很高興知道這一點。 乾杯

PS。沒有更多的代碼。就是這樣。 PS2。這是您在重複線程中建議的另一個問題。我不使用ng-repeat。

+0

你能提供你在哪裏設置類更多的代碼? –

+1

可能重複[如何驗證使用ng-repeat動態創建的輸入,ng-show(angular)](http://stackoverflow.com/questions/12044277/how-to-validate-inputs-dynamically-created-using- ng-repeat-ng-show-angular) –

+0

沒有重複。這是另一個問題。 –

回答

2

一旦輸入的值以任何方式改變,它不會重置爲NG-質樸除非你強制。

你可以在你的控制器管理類,像這樣:

$scope.currentLanguage = 'de'; 
$scope.company = { name: { de: '', en: '' } }; 

$scope.setCurrentLanguage = function(str) { 
$scope.currentLanguage = str; 
var input = angular.element(document).find('input')[0]; 
if ($scope.company.name[str] == '') { 
    angular.element(input).removeClass('ng-dirty'); 
    angular.element(input).removeClass('ng-invalid'); 
    angular.element(input).addClass('ng-pristine'); 
} else { 
    angular.element(input).removeClass('ng-pristine'); 
    angular.element(input).addClass('ng-dirty'); 
} 
} 

,並在html:

<input type="text" ng-model="company.name[currentLanguage]" /> 
<button ng-click="setCurrentLanguage('de')">Deutsch</button> 
<button ng-click="setCurrentLanguage('en')">English</button>