aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Minar2011-09-02 22:59:59 -0700
committerIgor Minar2011-09-07 23:37:37 -0700
commit06534413d3a33193853c39d0f9081709aac3908f (patch)
treedef8ddd93eb71175360bf4dab4593be9e2cd489d
parente54909f5efa37cd4013d7f21a77817ea459cde64 (diff)
downloadangular.js-06534413d3a33193853c39d0f9081709aac3908f.tar.bz2
fix(ng:options): ng:change should be called after the new val is set
Closes #547
-rw-r--r--src/widgets.js2
-rw-r--r--test/widgetsSpec.js16
2 files changed, 12 insertions, 6 deletions
diff --git a/src/widgets.js b/src/widgets.js
index 42e608dd..254331c0 100644
--- a/src/widgets.js
+++ b/src/widgets.js
@@ -762,8 +762,8 @@ angularWidget('select', function(element){
}
}
if (isDefined(value) && model.get() !== value) {
- onChange(scope);
model.set(value);
+ onChange(scope);
}
scope.$root.$apply();
} finally {
diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js
index 235f5492..42220201 100644
--- a/test/widgetsSpec.js
+++ b/test/widgetsSpec.js
@@ -900,22 +900,28 @@ describe("widget", function(){
createSelect({
name:'selected',
'ng:options':'value for value in values',
- 'ng:change':'count = count + 1'
+ 'ng:change':'log = log + selected.name'
});
scope.values = [{name:'A'}, {name:'B'}];
scope.selected = scope.values[0];
- scope.count = 0;
+ scope.log = '';
scope.$digest();
- expect(scope.count).toEqual(0);
+ expect(scope.log).toEqual('');
select.val('1');
browserTrigger(select, 'change');
- expect(scope.count).toEqual(1);
+ expect(scope.log).toEqual('B');
expect(scope.selected).toEqual(scope.values[1]);
+ // ignore change event when the model doesn't change
browserTrigger(select, 'change');
- expect(scope.count).toEqual(1);
+ expect(scope.log).toEqual('B');
expect(scope.selected).toEqual(scope.values[1]);
+
+ select.val('0');
+ browserTrigger(select, 'change');
+ expect(scope.log).toEqual('BA');
+ expect(scope.selected).toEqual(scope.values[0]);
});
it('should update model on change through expression', function(){