Skip to content

Commit 6188949

Browse files
committed
fix(ngModel): always executing getter/setter methods with context
1 parent e69c180 commit 6188949

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

src/ng/directive/input.js

+10-3
Original file line numberDiff line numberDiff line change
@@ -1719,10 +1719,12 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
17191719
pendingDebounce = null,
17201720
ctrl = this;
17211721

1722+
var parsedNgModelContext = null;
1723+
17221724
var ngModelGet = function ngModelGet() {
17231725
var modelValue = parsedNgModel($scope);
17241726
if (ctrl.$options && ctrl.$options.getterSetter && isFunction(modelValue)) {
1725-
modelValue = modelValue();
1727+
modelValue = modelValue.call(parsedNgModelContext ? parsedNgModelContext($scope) : $scope);
17261728
}
17271729
return modelValue;
17281730
};
@@ -1732,7 +1734,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
17321734
if (ctrl.$options && ctrl.$options.getterSetter &&
17331735
isFunction(getterSetter = parsedNgModel($scope))) {
17341736

1735-
getterSetter(ctrl.$modelValue);
1737+
getterSetter.call(parsedNgModelContext ? parsedNgModelContext($scope) : $scope, ctrl.$modelValue);
17361738
} else {
17371739
parsedNgModel.assign($scope, ctrl.$modelValue);
17381740
}
@@ -1741,7 +1743,12 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
17411743
this.$$setOptions = function(options) {
17421744
ctrl.$options = options;
17431745

1744-
if (!parsedNgModel.assign && (!options || !options.getterSetter)) {
1746+
if (options && options.getterSetter) {
1747+
var ngModelContext = $attr.ngModel.match(/^(.+)\.[\w$]+$/);
1748+
if (ngModelContext) {
1749+
parsedNgModelContext = $parse(ngModelContext[1]);
1750+
}
1751+
} else if (!parsedNgModel.assign) {
17451752
throw $ngModelMinErr('nonassign', "Expression '{0}' is non-assignable. Element: {1}",
17461753
$attr.ngModel, startingTag($element));
17471754
}

0 commit comments

Comments
 (0)