Вывод значений высчитанных в 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, время: 18:12. |