Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Вывод значений высчитанных в ng-repeat, после изменения scope (https://javascript.ru/forum/angular/48424-vyvod-znachenijj-vyschitannykh-v-ng-repeat-posle-izmeneniya-scope.html)

lasfin 03.07.2014 11:14

Вывод значений высчитанных в 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 не понимаю, но буду признателен за любые подсказки.

FireVolkhov 03.07.2014 12:40

А где код контроллера?

lasfin 03.07.2014 13:35

'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

FireVolkhov 04.07.2014 07:03

Что ты подразумеваешь под "2 часть перестает адекватно работать"?
Сделай пример на сайте типа этого будет проще разобраться.

a.malitsky 04.07.2014 23:10

Не надо ничего высчитывать в ng-repeat, он используется в темплейте для отображения. Для расчетов используется контроллер.


Часовой пояс GMT +3, время: 18:12.