Skip to content Skip to sidebar Skip to footer

Set $modelvalue Without Changing $viewvalue

In angular 1.2 I need to be able to update the $modelValue without affecting the $viewValue. I want the internal value to be one value, while what the user sees to be another. Th

Solution 1:

When anything triggers the model to change, something like setter(scope, validate()); in the example above, it will trigger the $formatters to run. The $formatters are passed the $modelValue and can return a value that will be used for the $viewValue. Knowing this, you can use a simple function that just returns the $viewValue in the formatter. With this, updating the model programmatically will not affect the $viewValue, and thus not change the value that appears in <inputs>

ctrl.$formatters.push(formatter)

functionformatter(modelValue){
    return ctrl.$viewValue;
}

For the example in the question, you would want to return the $viewValue only when the $modelValue is undefined. For that you can use this:

ctrl.$formatters.push(formatter)

functionformatter(modelValue){
    return modelValue === undefined? ctrl.$isEmpty(ctrl.$viewValue)? undefined : ctrl.$viewValue : modelValue;
}

Working example: http://jsfiddle.net/TheSharpieOne/q1s7Lf7z/17/

Post a Comment for "Set $modelvalue Without Changing $viewvalue"