diff --git a/src/buttons/buttons.js b/src/buttons/buttons.js index 41ea0a5d9b..39cf42fccc 100644 --- a/src/buttons/buttons.js +++ b/src/buttons/buttons.js @@ -14,11 +14,9 @@ angular.module('ui.bootstrap.buttons', []) require:'ngModel', link:function (scope, element, attrs, ngModelCtrl) { - var value = scope.$eval(attrs.btnRadio); - //model -> UI ngModelCtrl.$render = function () { - if (angular.equals(ngModelCtrl.$modelValue, value)){ + if (angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio))){ element.addClass(activeClass); } else { element.removeClass(activeClass); @@ -29,7 +27,7 @@ angular.module('ui.bootstrap.buttons', []) element.bind(toggleEvent, function () { if (!element.hasClass(activeClass)) { scope.$apply(function () { - ngModelCtrl.$setViewValue(value); + ngModelCtrl.$setViewValue(scope.$eval(attrs.btnRadio)); ngModelCtrl.$render(); }); } diff --git a/src/buttons/test/buttons.spec.js b/src/buttons/test/buttons.spec.js index 6c0fa65aec..b7ee29d26c 100644 --- a/src/buttons/test/buttons.spec.js +++ b/src/buttons/test/buttons.spec.js @@ -100,5 +100,24 @@ describe('buttons', function () { expect(btns.eq(1)).toHaveClass('active'); expect(btns.eq(0)).not.toHaveClass('active'); }); + + it('should watch btn-radio values and update state accordingly', function () { + $scope.values = ["value1", "value2"]; + + var btns = compileButtons('', $scope); + expect(btns.eq(0)).not.toHaveClass('active'); + expect(btns.eq(1)).not.toHaveClass('active'); + + $scope.model = "value2"; + $scope.$digest(); + expect(btns.eq(0)).not.toHaveClass('active'); + expect(btns.eq(1)).toHaveClass('active'); + + $scope.values[1] = "value3"; + $scope.model = "value3"; + $scope.$digest(); + expect(btns.eq(0)).not.toHaveClass('active'); + expect(btns.eq(1)).toHaveClass('active'); + }); }); }); \ No newline at end of file