You can write something like that (by using $watch):
JS
angular.module('app', [])
.controller('Ctrl', function ($scope) {
$scope.mymodel = {};
$scope.mymodel.time = 0;
$scope.mymodel.distance = 0;
$scope.mymodel.speed = 0;
$scope.$watch(function () {
return $scope.mymodel;
},
function (newValue, oldValue) {
$scope.mymodel.speed = (newValue.distance > 0) ? newValue.distance / newValue.time : 0;
}, true);
});
HTML
Time: <input type="number" ng-model="mymodel.time" />
<br />
Distance: <input type="number" ng-model="mymodel.distance" />
<br />
Speed: <input type="number" ng-model="mymodel.speed" />
Comment
Its only example, in this case you can't change velocity (speed).
Changed DEMO
[EDIT]
you can play with $watch to control sub-fields:
$scope.$watch(function () {
return $scope.mymodel;
},
function (newValue, oldValue) {
if(newValue.speed != oldValue.speed){
$scope.mymodel.time = newValue.distance / newValue.speed;
$scope.mymodel.distance =newValue.time *newValue.speed;
}
else if(newValue.distance != oldValue.distance){
$scope.mymodel.speed = (newValue.distance > 0) ? newValue.distance / newValue.time : 0;
}
else if(newValue.time != oldValue.time){
$scope.mymodel.speed = (newValue.distance > 0) ? newValue.distance / newValue.time : 0;
}
}, true);
Demo 2
$watchto fire a callback whenever user changestimeordistanceand update other values accordingly.