У меня есть вложенный список/массив в AngularJS как:
$scope.myCars = [
name: 'Audi', types: [
{name: 'A4', price: '150000'},
{name: 'A6', price: '250000'},
{name: 'A8', price: '350000'}
],
name: 'BMW', types: [
{name: 'M1', price: '250000'},
{name: 'M3', price: '450000'}
]
];
Я перебираю список и создаю DOM:
<ul>
<li ng-repeat="car in MyCars">
{{car.name}}:
<ul>
<li ng-repeat="type in car.types">
{{type.name}}:
<input ng-model="type.name" ng-value="type.price">
</li>
</ul>
</li>
</ul>
Он показывает все правильно, но когда я обновляю цену во входном поле, мои $ watch в $ scope.myCars меняют type.name вместо type.price - это неправильно.
Правильно ли я делаю, или?
Вы используете ng-model="type.name"
который устанавливает двустороннюю привязку данных между значением этого входа и type.name
. Если вы хотите, чтобы привязка данных к type.price
использовала это вместо этого:
<input ng-model="type.price">
Здесь не ng-value
потому что оно не работает с ng-model
для одного и того же элемента ввода текста, поскольку ng-model
переопределяет значения из ng-value
.
Примечание. ng-value
не предназначено для <input type="text">
, это означает <input type="radio">
или option
.
вам не нужно ng-значение с ng-моделью. изменить это
<input ng-model="type.name" ng-value="type.price">
в
<input ng-model="type.price" >
ng-model="type.name"
должно бытьng-model="type.price"
. Вам не нужно устанавливатьng-value
.