이 코드는 오프라인 네트워크에 있으므로 여기에 붙여 넣을 수 없습니다. 나는 그것을 요약하고있다.표현식을 다시 평가할 때 ng-class가 적용되지 않습니다.
<tr ng-repeat="agent in agents" ng-class="agent.getClass()">
<td>{{agent.server}}</td>
<td>{{agent.status}}</td>
</tr>
agents
목록이 아약스 요청을 통해로드됩니다
나는 다음과 같은 코드가 있습니다.
app.js : 공식적으로
angular.module('agentsApp', [])
.controller('agentsController', function($scope, $http, $interval) {
$scope.agents = {};
$interval(function() {
$http.get('/AgentsServlet').success(function(data) {
angular.forEach(data, function(agent) {
$scope.agents[agent.server] = new Agent(agent.server, agent.status);
});
});
}, 1000);
});
Agent.js
var Agent = function(server, status) {
this.server = server;
this.status = status;
}
Agent.prototype.getClass = function() {
return {
success: this.status === 'RUNNING',
error: this.status === 'ERROR'
};
}
, 간단한 텍스트 파일에서 AgentsServlet
로드 에이전트 및 데이터.
이제 파일 내용을 변경하면 다음 ajax 요청이 성공적으로로드되고 테이블 내용을 업데이트하지만 ng 클래스는 변경되지 않습니다. 예를 들어, 상담원의 상태를 실행 중에서 오류로 변경하면 해당 상담원의 클래스가 '오류'로 변경되지 않습니다.
이상한 것은 예를 들면, 나는 NG 수준의 내부 getClass() 논리를 넣으면 작동한다는 것입니다 :
<tr ng-repeat="agent in agents"
ng-class="{success: agent.status==='RUNNING', error: agent.status==='ERROR'}">
<td>{{agent.server}}</td>
<td>{{agent.status}}</td>
</tr>
함수 호출이 문제가 아니라 표현 것 같습니다 .. 아이디어가 있으십니까?
감사
ng-class는 getClass()에서 반환 된 cssClass => 표현식의 배열을 가져 오는 것으로 가정합니다. 필드를 변경해서는 안됩니다. 필드 상태가 ajax 성공 콜백에 설정됩니다. – orirab