2014-09-13 7 views
0

내 웹에서 사람들이 이벤트를 만들고 가입 할 수 있습니다. 이벤트 목록에는 두 개의 버튼 (가입/로그 오프)이 있습니다. 버튼 (가입) :이 버튼을 누르면 보조자와 같은 이벤트에 나를 추가 할 수 있습니다. 버튼 (로그 오프). 이 버튼을 누르면 이벤트가 제거됩니다. 이 잘 작동하지만, 문제는 필터에 있습니다angularjs 필터가 작동하지 않습니다.

{{ event.attendees }} // working well because is updated when press the button 
{{ ([event.attendees] | filter:currentUser.id).length }} // not working always is 0 

<button id="signup" ng-click="sign(event.attendees, currentUser.id)" ng-show="([event.attendees] | filter:currentUser.id).length == 0"> 
<button id="signdown" ng-click="sign(event.attendees, currentUser.id)" ng-show="([event.attendees] | filter:currentUser.id).length == 0"> 


controller(){ 

$scope.signup = function(attendees, currentUser_id) { 
    attendees.push(currentUser_id); 
} 

내가 원하는 당신은 버튼 가입 버튼 가입에 페이드 아웃을하고 버튼 signdown에 fadein하지만 업데이트되지 않기 때문에 필터가 작동하지를 누를 때.

답변

0

대괄호 안에 event.attendees를 래핑합니다. 즉, 실제로 수행중인 작업은 배열 요소 하나, 즉 참석자 배열을 필터링하는 것입니다. 그러면 검색중인 문자열을 찾을 수 없습니다. 대신이 시도 :

{{ (event.attendees | filter:currentUser.id).length }} 

을 지금, 나는 한 페이지에 여러 장소에서 같은 필터를 사용하여 루프 무한 다이제스트 나쁜 경험이 있고,이 정말 필터가 어쨌든 사용하는 가정되는 방법이 아니다. 따라서 컨트롤러에 isSignedUp 함수를 추가하는 것이 좋습니다. underscorejs을 사용하면 쉽게 구현할 수 있습니다.

$scope.isSignedUp = function(attendees, id) { 
    return _.findWhere(attendees, {id: id}) !== undefined; 
} 
+0

감사합니다. – user3902406

+0

우수. 내 대답을 받아 들일 수 있도록 표시해 주시겠습니까? – rmehlinger

관련 문제