Вывод значений высчитанных в ng-repeat, после изменения scope
Есть такой html:
<tr ng-repeat="(key, val) in data.stages" ng-if="val.one_segment !== '' " ng-init="count()">
<td>{{key}}</td>
<td>{{val.time1}}</td>
<td>{{val.time2}}</td>
<td>{{val.one_segment}}</td>
<td ng-init="getTotal(diff(val.time1, val.time2))">{{diffAbsolute(val.time1, val.time2)}}</td>
<td>{{setDriver(diff(val.time1, val.time2), data.pilot1, data.pilot2)}}</td>
</tr>
На основании данных, высчитанных в ng-repeat выводится следующая часть html:
<p class="bg-primary">Total gap: <span>{{timeDif}}</span></p>
<p>Total races: {{total}}</p>
<h2 class="name_pilot" ng-bind="data.pilot1"></h2>
<p style="display: inline-block;" class="win1" ng-bind="winOne"></p>
<p style="display: inline-block" class="win2" ng-bind="winTwo"></p>
Проблема в том, что после получения других данных через $http.get 2 часть перестает адекватно работать. Скорее всего, проблема в том, что я каких-то супер базовых вещей angular не понимаю, но буду признателен за любые подсказки. |
А где код контроллера?
|
'use strict';
/* Controllers */
var f1App = angular.module('f1App', []);
f1App.controller('DataCtrl', function($scope, $http) {
$http.get('../data/ferrari.json').success(function(data) {
$scope.data = data;
});
$scope.changeData = function(teamName) {
switch (teamName){
case 'redBull':
$http.get('../data/redbull.json').success(function(data) {
$scope.data = data;
});
break;
case 'ferrari':
$http.get('../data/ferrari.json').success(function(data) {
$scope.data = data;
});
break;
case 'caterham':
$http.get('../data/caterham.json').success(function(data) {
$scope.data = data;
});
break;
$scope.diff = function(a, b){//разница между временами в одной квалификации
return getDiff(a,b);
};
$scope.diffAbsolute = function(a, b){//абсолютная разница для вывода в шаблоне
return Math.abs(getDiff(a,b));
};
$scope.total = 0; //всего гонок
$scope.count = function(){
console.log('Раздва');
$scope.total++;
};
$scope.winOne = 0;//победы первого
$scope.winTwo = 0;//победы второго
$scope.timeDif = 0;//разница во времени
$scope.getTotal = function(a) {
$scope.timeDif += parseFloat(a);
if(a > 0){
$scope.winOne+=1;
} else {
$scope.winTwo+=1;
}
};
$scope.winner = '';//победитель отдельной квалы
$scope.setDriver = function (time, pilot1, pilot2){
if (parseFloat(time) < 0) {
$scope.winner = pilot2;
}
else {
$scope.winner = pilot1;
}
return $scope.winner;
};
});//DataCtrl
|
Что ты подразумеваешь под "2 часть перестает адекватно работать"?
Сделай пример на сайте типа этого будет проще разобраться. |
Не надо ничего высчитывать в ng-repeat, он используется в темплейте для отображения. Для расчетов используется контроллер.
|
| Часовой пояс GMT +3, время: 12:23. |