Вы определяете $scope.tech
как массив:
$scope.tech = [
{...}
];
Но, по вашему мнению, вы пытаетесь получить к нему доступ, как если бы это был объект со свойством rate
, которого не существует:
<button type="submit"
ng-click="incrementRate(tech,tech.rate)">Rate</button>
<!-- tech is an array, and has no property called `rate`-->
Если вы разместите здесь несколько сообщений журнала, вы увидите ошибку:
$scope.incrementRate= function(t,r)
{
console.log(t) // Array(6)
console.log(r) // Undefined!
...
};
Кроме того, плохой выбор назначить модель для вашего компонента select
в качестве свойствамассив.Это очень сбивает с толку.Используйте выделенную переменную, чтобы назначить выбранный элемент.Вы также очень усложнили для себя использование ngRepeat
с опциями вместо ngOptions
.При таком подходе у вас есть доступ только к строковому представлению элемента, а не к самому объекту элемента.
<select ng-model="selectedTech" ng-options="t as t.name for t in tech track by t.name">
</select>
Теперь вы можете ссылаться на выбранный элемент в своей функции:
<button type="submit"
ng-click="incrementRate(selectedTech)">Rate</button>
$scope.incrementRate= function(techItem)
{
console.log(techItem) // {name: "angular", rate: 0, bar: 10},
console.log(techItem.rate) // 0
...
};
Поскольку selectedTech
является свойством $scope
, вам даже не нужно передавать его как переменную:
<button type="submit"
ng-click="incrementRate()">Rate</button>
$scope.incrementRate= function()
{
console.log($scope.selectedTech) // {name: "angular", rate: 0, bar: 10},
console.log($scope.selectedTech.rate) // 0
...
};