Ng-model To Async Xhr Get/set Field On My Server
Solution 1:
Here is a shot in the dark of what I believe you are after. First, ng-pattern
will not prevent typing, only trigger validation. Instead, start out by using input[number]. I'm also guessing you wish to see the manual value you set in your <input />
, and not the keyed entry. For this, fire off $event.preventDefault()
, bound to ng-keydown
. Here is a complete working sample I wrapped in a decorator directive called async
. Observe the following...
<inputtype="number"async ng-keydown="sync($event)" ng-model="model" />
.directive('async', ['myService', function(myService) {
return {
require: 'ngModel',
link: function(scope, elem, attrs, ngModel) {
scope.sync = function($event) {
$event.preventDefault();
myService.getValue().then(function(response) {
myService.setValue(response).then(function(final) {
ngModel.$setViewValue(final)
ngModel.$render();
});
});
}
}
}
}]);
Where myService
is a mocked service leveraging $q
and $timeout
to emulate asynchronous behavior...
.factory('myService', ['$q', '$timeout', function($q, $timeout) {
functiongetValue () {
var deferred = $q.defer();
$timeout(function () {
deferred.resolve(123);
}, 250);
return deferred.promise;
}
functionsetValue(value) {
var deferred = $q.defer();
$timeout(function () {
deferred.resolve(value);
}, 250);
return deferred.promise;
}
return {
getValue: getValue,
setValue: setValue
}
}]);
Where 123
- a sample value - is asynchronously daisy chained through the getValue
and setValue
functions. The result from getValue
is also passed as a parameter to setValue
in case further manipulation is needed before finally calling ngModel.$setViewValue
and ngModel.$render()
. Additionally, your objective is to likely leverage a request in getValue()
. When getting to that point, simply inject a service such as $http
and model accordingly...
function getValue () {
return $http.get('/endpoint');
}
JSFiddle Link - working demo - type 1
=> 500ms => 123
If my assumption was wrong where you wished to prevent the keyed value initially, you can alternatively bind to ng-change
and remove $event.preventDefault
. If you chose this, you'll see your initial typed value, which will then change (get/set) as expected.
Post a Comment for "Ng-model To Async Xhr Get/set Field On My Server"