将数组从数据库传递到控制器AngularJs

我有一个这个应用程序,我正在build设学习AngularJs的一个小问题。

这是一个足球统计应用程序。 我从2个下拉菜单中select主队和客队。 然后,我必须做一些math运算,只显示结果。

这是我的html代码:

<div class='dropdown'> <span>Seleziona Nazione: </span> <select class='opzioni' ng-model="nazioniSelected"> <option ng-repeat="nazione in nazioni track by $index" value="{{nazione}}">{{nazione}} </option> </select> </div> <div class='dropdown2'> <span>Seleziona Campionato: </span> <select class='opzioni' ng-model="campionatoSelected"> <option ng-repeat="team in teams | filter: {Paese:nazioniSelected} track by $index" value="{{team.Campionato}}">{{team.Campionato}} </option> </select> </div> <div class='SquadraCasa'> <span>Seleziona Squadra Casa: </span> <select class='opzioni' ng-model="HomeTeamSelected" > <option ng-repeat="team in teams | filter: {Campionato:campionatoSelected, Paese:nazioniSelected} track by $index" value='{{team.Nome}}'> {{team.Nome}} </option> </select> </div> <div class='SquadraTrasferta'> <span>Seleziona Squadra Trasferta: </span> <select class='opzioni' ng-model="AwayTeamSelected"> <option ng-repeat="team in teams | filter: {Campionato:campionatoSelected, Paese:nazioniSelected} track by $index" value='{{team.Nome}}'>{{team.Nome}} </option> </select> </div> <div class='InfoCasa'> <ul ng-repeat='team in teams | filter: {Nome: HomeTeamSelected} track by $index'> <img ng-show='HomeTeamSelected' src="{{team.Stemma}} "> <p class='nome' ng-show='HomeTeamSelected'> {{team.Nome}} </p> </ul> </div> <div class='InfoTrasferta'> <ul ng-repeat='team in teams | filter: {Nome: AwayTeamSelected} track by $index'> <img ng-show='AwayTeamSelected' src="{{team.Stemma}} "> <p class='nome2' ng-show='AwayTeamSelected'> {{team.Nome}} </p> </ul> </div> <div class="Calcolo" ng-show='AwayTeamSelected'> <p> Doppia Chance {{doppia}} </p><br><br> <p> 1x2 </p><br><br> <p> Over 1,5 </p><br><br> <p> Over 2,5 </p> <button class="calcola" ng-click='calcolarisultato(HomeTeamSelected,AwayTeamSelected)' > Calcola </div> 

我的问题是:在这个ng-click中,我想要传递的不仅是名字,而是所有的团队variables,因为我需要所有关于我select的团队的数据。

现在我的控制器是这样的,不工作:

  FootballNumbers.controller('teamController', function($scope, $route, $routeParams, $http) { $http.get('/api/teams').then(function(response) { $scope.teams = response.data; console.log(response.data); }); var squadra = $scope.teams; $scope.nazioni = ['Austria', 'Belgio', 'Bulgaria', 'Croazia', 'Danimarca', 'Finlandia', 'Francia', 'Germania', 'Grecia', 'Inghilterra', 'Italia', 'Norvegia', 'Olanda', 'Polonia', 'Portogallo', 'Rep. Ceca', 'Romania', 'Russia', 'Spagna', 'Turchia', 'Svezia', 'Svizzera', 'Ucraina' ]; $scope.calcolarisultato = function(squadra1, squadra2) { for (i = 0; i < squadra.length; i++) { for (j = 0; j < squadra.length; i++) { if (squadra[i].Nome == squadra1) { if (squadra[j].Nome == squadra2) { var media1 = (squadra[i].Classifica + squadra[i].ClassificaCasa + squadra[i].Forma) / 3; var media2 = (squadra[j].Classifica + squadra[j].ClassificaTrasferta + squadra[i].Forma) / 3; if ((media1 + 3) <= media2) { $scope.doppia = '1 X'; } else if ((media2 + 3) <= media1) { $scope.doppia = 'X 2'; } else { $scope.doppia = 'Niente'; } } } } } } }); 

它对我说,球队没有定义。

这是我的解决scheme,但正如我所说,我想传递所有的HomeTeam和AwayTeam数据的function,不仅如此,我在这个代码中的名字。 请帮忙吗?

你用一个asynchronous函数初始化teams ,但是你在之前启动了squadravariables来获得这些值。 而不是在你的控制器中使用squadra值,只需使用$scope.teams并删除这一行:

 var squadra = $scope.teams; 

然后在你的控制器中的任何地方使用squadra,用$scope.teams改变它

也认为将常量定义为分离的AngularJS常量,而不是将它们列在控制器中,然后在控制器中注入该常量。 这使代码更清洁,更可重用。

问题是由于asynchronous执行。 由于asynchronous执行, squadra的值在API调用之外是未定义的。

  FootballNumbers.controller('teamController', function($scope, $route, $routeParams, $http) { $http.get('/api/teams').then(function(response) { $scope.teams = response.data; console.log(response.data); var squadra = $scope.teams; }); $scope.nazioni = ['Austria', 'Belgio', 'Bulgaria', 'Croazia', 'Danimarca', 'Finlandia', 'Francia', 'Germania', 'Grecia', 'Inghilterra', 'Italia', 'Norvegia', 'Olanda', 'Polonia', 'Portogallo', 'Rep. Ceca', 'Romania', 'Russia', 'Spagna', 'Turchia', 'Svezia', 'Svizzera', 'Ucraina' ]; $scope.calcolarisultato = function(squadra1, squadra2) { for (i = 0; i < squadra.length; i++) { for (j = 0; j < squadra.length; i++) { if (squadra[i].Nome == squadra1) { if (squadra[j].Nome == squadra2) { var media1 = (squadra[i].Classifica + squadra[i].ClassificaCasa + squadra[i].Forma) / 3; var media2 = (squadra[j].Classifica + squadra[j].ClassificaTrasferta + squadra[i].Forma) / 3; if ((media1 + 3) <= media2) { $scope.doppia = '1 X'; } else if ((media2 + 3) <= media1) { $scope.doppia = 'X 2'; } else { $scope.doppia = 'Niente'; } } } } } } });