Я хотел бы рассмотреть вопрос о предоставлении решения для вашего кода без каких-либо изменений в ng-model
для select
и input
.
Есть две вещи, которые вы могли бы сделать,
1) Передайте select.id
в функцию setPrice()
, например,
<select ng-model="select.id" ng-options="x.id as x.name for x in cars" ng-change="setPrice(select.id)">
2) Отфильтруйте фактический массив $scope.cars
с помощью id передается как,
$scope.setPrice = function(selectedId) {
const data = $scope.cars.filter((item,i) => item.id === selectedId);
$scope.select.price = data[0].value;
}
Функция фильтра выдаст результат в виде одного значения внутри массива, и, следовательно, вы можете использовать data[0].value
, чтобы получить значение.
После двух изменений ваш полный код будет выглядеть так:
let app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.selected = {}
$scope.cars = [
{id:"1", name : "Ford", value : 1000},
{id:"2",name : "Fiat", value : 5000},
{id:"3",name : "Volvo", value : 6000}
];
$scope.setPrice = function (selectedId){
const data = $scope.cars.filter((item,i) => item.id === selectedId);
$scope.select.price = data[0].value;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<select ng-model="select.id" ng-options="x.id as x.name for x in cars" ng-change="setPrice(select.id)">
<input type="text" ng-model="select.price"/>
</div>
Рабочий толкатель