好的,所以這可能聽起來像驗證,但它更像是一個禮貌通知函數。AngularJS - 在提交時,更改特定的dom屬性
問題:我有一個ng-repeat,它在輸入框中以姓氏的形式顯示個人數據,以允許用戶編輯姓名和/或姓氏。 我想在提交時通知用戶他們將提交沒有名字姓氏的數據。目前我可以很容易地找到無名姓氏,但只要我應用了CSS,它就會應用於所有元素。如何僅將它應用於無名對象? 另外,這應該通過指令來完成嗎?
我已經嘗試過相當多的東西了,現在最簡單的解決方案如下所示。
注意:此示例用於更復雜數據結構的概念證明,因此是愚蠢的數據。
下面是代碼:
HTML:
<body ng-app="ap" ng-controller="con">
<table>
<tr>
<td>name</td>
<td>surname</td>
</tr>
<tr ng-repeat="person in persons">
<td>
<input type='text'
ng-class="empty"
ng-model="person.name"
value="{{ person.name }}"/>
</td>
<td>
<input type='text'
ng-model="person.surname"
value="{{ person.surname }}"/>
</td>
</tr>
</table>
<button ng-click="submit()">Change Class</button>
控制器:
var app = angular.module("ap",[]);
app.controller("con",function($scope){
$scope.persons = [
{name: '', surname: 'Peters'},
{name: 'Sue', surname: 'Anne'},
{name: 'Jack', surname: 'Daniels'},
{name: '', surname: ''},
{name: '', surname: 'Bar'},
{name: '', surname: 'Other'},
];
$scope.empty = "normal";
$scope.submit = function(){
for(var i = 0; i < $scope.persons.length; i++) {
if($scope.persons[i].name === '') {
$scope.empty = "empty";
}
}
};
});
CSS:
.empty{
border-style: solid;
border-color: rgba(255, 135, 66, 0.75);
background-color: rgba(252, 102, 2, 0.54);
}
.normal{
color: black;
}
這裏是小提琴的鏈接:fiddle
出於好奇,你爲什麼要$ scope.empty一個數組?是否這樣重複中的每個項目都匹配'空'數組中的索引和值? – avn 2014-09-15 06:46:26
每個ngRepeat都會創建一個小的局部範圍,因此您需要一組值來控制它們。在您的代碼中,您希望$ scope.empty同時控制x個不同的事物,並且您得到的是*所有*元素都被突出顯示或未突出顯示。如果您對此方法感到滿意,請將其標記爲已接受的答案。 – 2014-09-15 07:00:20
太好了,謝謝你的分配。我感覺合理。這兩個答案都可以工作,但我更喜歡你的方法,這使得稍後用觀察者去除類更容易。 – avn 2014-09-15 08:05:03