You should make a plunkr/jsfiddle before posting here.
You are to be creating a scope and controller for each button and setting 
scope.selectedButtonId on each individual scope instead of on a parent 
scope, thus never overwriting the previous selectedButtonId. Your template 
should look like this instead, with a single parent controller:

<div ng-controller="ButtonsCtrl as ctrl"> 

<button ng-class="{ selected: button.id == selected }" ng-repeat="button in 
buttons" ng-click="ctrl.select(button)" ng-bind="button.label"></button>

</div>


and your controller

module.controller 'ButtonsCtrl', ['$scope', ($scope) -> 

select: (btn) -> $scope.selected = btn.id

 ]


On Tuesday, March 25, 2014 5:09:18 PM UTC-4, Josh Stratton wrote:
>
> I'm trying to implement a little demo of buttons, where I can eventually 
> move between buttons using the arrow keys.  I'm a little confused about the 
> scoping though.  On my controller I define an array of buttons I add to the 
> scope.  I iterate through this array in the html.  
>
>     <button class="button" ng-class="{ selected: button.id == 
> selectedButtonId }" ng-click="toggleSelection()" ng-repeat="button in 
> buttons" ng-controller="ItemController">
>       {{ button.label }}
>     </button>
>
> I also set a selectedButtonId in that main controller, which keeps track 
> of which button is selected.  I set this to the first button label.  When I 
> load the app, the first button is highlighted as I would suspect because 
> selectedButtonId is the id for that button.  When I click on another 
> button, it calls toggleSelection() in the ItemController and updates 
> selectedButtonId.  This causes the new button to be highlighted.  
>
>                 $scope.toggleSelection = function() {
>
>                     $scope.selectedButtonId = $scope.button.id;
>                 };
>
> My problem is none of the other buttons are unhighlighting.  I figured 
> that since I was changing $scope.selectedButtonId, it would cause all the 
> buttons to change based on selectedButtonId.  I'm obviously not 
> understanding scope correctly.  When I set selectedButtonId in the 
> ItemController does that suddenly become unique to the scope of that button 
> and I haven't really changed it for all the other buttons?  Or have I 
> modified it in the "global" or parent scope, but the buttons haven't been 
> told to reevaluate their class?  I've tried calling $scope.$apply() to make 
> it update the other buttons, but this causes an error because the event is 
> called from an angular context and should already be updated.  What am I 
> misunderstanding?  
>

-- 
You received this message because you are subscribed to the Google Groups 
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to