I'm just starting to use Angular JS to bind my model to a number of input fields. My model includes a phone number, formatted as a single string: "1234567890".
function Ctrl($scope) {
$scope.phone = "1234567890";
}
I would like to have three input fields that are tied to the relevant parts of the phone number (area code, three digit number, four digit number).
<div ng-controller="Ctrl">
(<input type="text" maxlength="3">) <input type="text" maxlength="3"> - <input type="text" maxlength="4">
</div>
However, I'm having trouble creating a two-way binding for each input field to the parts of the phone string. I have already tried two different approaches:
Approach 1
---- JavaScript ----
function Ctrl($scope) {
$scope.phone = "1234567890";
$scope.phone1 = $scope.phone.substr(0,3);
$scope.phone2 = $scope.phone.substr(2,3);
$scope.phone3 = $scope.phone.substr(5,4);
}
---- HTML ----
<div ng-controller="Ctrl">
(<input type="text" maxlength="3" ng-model="phone1">) <input type="text" maxlength="3" ng-model="phone2"> - <input type="text" maxlength="4" ng-model="phone3">
</div>
Approach 2
---- JavaScript ----
function Ctrl($scope) {
$scope.phone = "1234567890";
}
---- HTML ----
<div ng-controller="Ctrl">
(<input type="text" maxlength="3" ng-model="phone.substr(0,3)">) <input type="text" maxlength="3" ng-model="phone.substr(2,3)"> - <input type="text" maxlength="4" ng-model="phone.substr(5,4)">
</div>
Use approach 1, but add a $watch:
$scope.$watch(
function() {return $scope.phone1 + $scope.phone2 + $scope.phone3; }
,function(value) { $scope.phone = value; }
);
fiddle
I like @Karl's version better:
$scope.$watch('phone1 + phone2 + phone3',
function(value) { $scope.phone = value; }
);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With