2014-09-13 285 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淡入但过滤器不工作,因为不更新。

回答

0

你正在用方括号包装event.attendees。这意味着你实际上在做的是用一个单一的元素来过滤一个数组,这就是你的一系列参与者。这将永远不会找到您正在搜索的字符串。试试这个:

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

现在,我曾与无限消化不好的经验用在页面上的多个位置相同的滤波回路,这是不是真的过滤器应该是反正使用的方式。所以,我建议你考虑在控制器中增加一个isSignedUp函数。您可以使用underscorejs轻松实现:

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

谢谢,现在正在工作。 – user3902406 2014-09-13 21:06:12

+0

非常好。您介意将我的答案标记为已接受,以便其他人可以看到它已解决吗? – rmehlinger 2014-09-13 21:33:19