From 84e50c207ab7212ecc6619d826b45359f0c1482c Mon Sep 17 00:00:00 2001 From: g00fy- Date: Sun, 1 Dec 2013 16:12:56 +0100 Subject: [PATCH] feat(ngModelController): expose $setModelValue general usecase: - allow other directives requiring `ngModel` to easily assign model value - `$setViewValue` works only with basic "flat" values like strings or numbers (eg not objects). currently similar thing can be achieved by using `$parse(attr.ngModel).assign(scope.$parent,modelValue)` Specific usecase: AutoComplete input directive returning objects instead of values. `` parser: `function(value){ return {name:value} )` formatter: `function(value){ return angular.isObject(value) ? value.name : value }` the user list dropdown template: `
  • {{user.name}}
  • ` and the `select` function would be: `function(user){ngModel.$setModelValue(user)}` --- src/ng/directive/input.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ng/directive/input.js b/src/ng/directive/input.js index 8307f7e816e8..b7763cc892ac 100644 --- a/src/ng/directive/input.js +++ b/src/ng/directive/input.js @@ -1000,7 +1000,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ this.$name = $attr.name; var ngModelGet = $parse($attr.ngModel), - ngModelSet = ngModelGet.assign; + ngModelSet = this.$setModelValue = ngModelGet.assign; if (!ngModelSet) { throw minErr('ngModel')('nonassign', "Expression '{0}' is non-assignable. Element: {1}",