Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 0653441

Browse files
committed
fix(ng:options): ng:change should be called after the new val is set
Closes #547
1 parent e54909f commit 0653441

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

src/widgets.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -762,8 +762,8 @@ angularWidget('select', function(element){
762762
}
763763
}
764764
if (isDefined(value) && model.get() !== value) {
765-
onChange(scope);
766765
model.set(value);
766+
onChange(scope);
767767
}
768768
scope.$root.$apply();
769769
} finally {

test/widgetsSpec.js

+11-5
Original file line numberDiff line numberDiff line change
@@ -900,22 +900,28 @@ describe("widget", function(){
900900
createSelect({
901901
name:'selected',
902902
'ng:options':'value for value in values',
903-
'ng:change':'count = count + 1'
903+
'ng:change':'log = log + selected.name'
904904
});
905905
scope.values = [{name:'A'}, {name:'B'}];
906906
scope.selected = scope.values[0];
907-
scope.count = 0;
907+
scope.log = '';
908908
scope.$digest();
909-
expect(scope.count).toEqual(0);
909+
expect(scope.log).toEqual('');
910910

911911
select.val('1');
912912
browserTrigger(select, 'change');
913-
expect(scope.count).toEqual(1);
913+
expect(scope.log).toEqual('B');
914914
expect(scope.selected).toEqual(scope.values[1]);
915915

916+
// ignore change event when the model doesn't change
916917
browserTrigger(select, 'change');
917-
expect(scope.count).toEqual(1);
918+
expect(scope.log).toEqual('B');
918919
expect(scope.selected).toEqual(scope.values[1]);
920+
921+
select.val('0');
922+
browserTrigger(select, 'change');
923+
expect(scope.log).toEqual('BA');
924+
expect(scope.selected).toEqual(scope.values[0]);
919925
});
920926

921927
it('should update model on change through expression', function(){

0 commit comments

Comments
 (0)