Skip to content

Commit 81c31e7

Browse files
lgalfasoNarretz
authored andcommitted
refactor(form): remove the use of the private setter function
Remove the private `setter` function from $parse Replace the `setter` from the `form` directive with $parse Closes angular#12483
1 parent 5173ebf commit 81c31e7

File tree

3 files changed

+14
-33
lines changed

3 files changed

+14
-33
lines changed

src/.jshintrc

-3
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,6 @@
163163
/* ng/compile.js */
164164
"directiveNormalize": false,
165165

166-
/* ng/parse.js */
167-
"setter": false,
168-
169166
/* ng/directive/directives.js */
170167
"ngDirective": false,
171168

src/ng/directive/form.js

+14-7
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
449449
* related scope, under this name.
450450
*/
451451
var formDirectiveFactory = function(isNgForm) {
452-
return ['$timeout', function($timeout) {
452+
return ['$timeout', '$parse', function($timeout, $parse) {
453453
var formDirective = {
454454
name: 'form',
455455
restrict: isNgForm ? 'EAC' : 'E',
@@ -491,21 +491,21 @@ var formDirectiveFactory = function(isNgForm) {
491491
}
492492

493493
var parentFormCtrl = controller.$$parentForm;
494+
var setter = nameAttr ? getSetter(controller.$name) : noop;
494495

495496
if (nameAttr) {
496-
setter(scope, controller.$name, controller, controller.$name);
497+
setter(scope, controller);
497498
attr.$observe(nameAttr, function(newValue) {
498499
if (controller.$name === newValue) return;
499-
setter(scope, controller.$name, undefined, controller.$name);
500+
setter(scope, undefined);
500501
parentFormCtrl.$$renameControl(controller, newValue);
501-
setter(scope, controller.$name, controller, controller.$name);
502+
setter = getSetter(controller.$name);
503+
setter(scope, controller);
502504
});
503505
}
504506
formElement.on('$destroy', function() {
505507
parentFormCtrl.$removeControl(controller);
506-
if (nameAttr) {
507-
setter(scope, attr[nameAttr], undefined, controller.$name);
508-
}
508+
setter(scope, undefined);
509509
extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards
510510
});
511511
}
@@ -514,6 +514,13 @@ var formDirectiveFactory = function(isNgForm) {
514514
};
515515

516516
return formDirective;
517+
518+
function getSetter(expression) {
519+
if (expression === '') {
520+
return $parse('this[""]').assign;
521+
}
522+
return $parse(expression).assign || noop;
523+
}
517524
}];
518525
};
519526

src/ng/parse.js

-23
Original file line numberDiff line numberDiff line change
@@ -1610,29 +1610,6 @@ Parser.prototype = {
16101610
}
16111611
};
16121612

1613-
//////////////////////////////////////////////////
1614-
// Parser helper functions
1615-
//////////////////////////////////////////////////
1616-
1617-
function setter(obj, path, setValue, fullExp) {
1618-
ensureSafeObject(obj, fullExp);
1619-
1620-
var element = path.split('.'), key;
1621-
for (var i = 0; element.length > 1; i++) {
1622-
key = ensureSafeMemberName(element.shift(), fullExp);
1623-
var propertyObj = ensureSafeObject(obj[key], fullExp);
1624-
if (!propertyObj) {
1625-
propertyObj = {};
1626-
obj[key] = propertyObj;
1627-
}
1628-
obj = propertyObj;
1629-
}
1630-
key = ensureSafeMemberName(element.shift(), fullExp);
1631-
ensureSafeObject(obj[key], fullExp);
1632-
obj[key] = setValue;
1633-
return setValue;
1634-
}
1635-
16361613
var getterFnCacheDefault = createMap();
16371614
var getterFnCacheExpensive = createMap();
16381615

0 commit comments

Comments
 (0)