【问题标题】:pass array from database into controller AngularJs将数组从数据库传递到控制器 AngularJs
【发布时间】:2023-04-05 11:34:01
【问题描述】:

我为学习 AngularJs 而构建的这个应用程序有点问题。

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

这是我的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 中,我不仅要传递名称,还要传递所有团队变量,因为我需要有关我选择的团队的所有数据。

目前我的控制器是这样的并且无法正常工作:

              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';
                         }
                     }
                 }
             }
         }
     }
 });

它对我说没有定义小队。

这是我的解决方案,但正如我所说,我想传入函数中的所有 HomeTeam 和 AwayTeam 数据,而不仅仅是我在这段代码中所做的名称。有什么帮助吗?

【问题讨论】:

    标签: javascript html angularjs node.js


    【解决方案1】:

    问题是因为异步执行。由于异步执行,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';
                             }
                         }
                     }
                 }
             }
         }
     });
    

    【讨论】:

    • 好的,但这样我会丢失下拉列表中的所有过滤器
    • 对不起,如果您使用 API 的响应,我没有检查您的 HTML 代码。您可以尝试更新的答案吗?
    • 我移动了这个 var squares = $scope.teams;在 API 调用中或使用 $scope 值编辑变量,如下所示
    【解决方案2】:

    您使用异步函数初始化 teams,但您在获取这些值之前初始化了 squadra 变量。不要在控制器中使用squadra 值,只需使用$scope.teams 并删除此行:

    var squadra = $scope.teams;
    

    然后,无论您在控制器中使用小队的任何位置,都将其更改为 $scope.teams

    还可以考虑将常量定义为单独的 AngularJS 常量,而不是在控制器中列出它们,然后在控制器中注入该常量。这使代码更简洁,更可重用。

    【讨论】:

    • 好的,我不再收到错误消息了,但是当我点击按钮时没有任何反应。
    • 您是否已将所有存在squadra 的代码更改为$scope.teams,例如squadra[i].Nome 应该变为$scope.teams[i].Nome
    • 是的......事实上,当我点击按钮时我没有收到错误,但没有其他任何反应。我会检查得更好
    • @MarcoPagano sono felice la soluzione abbia funzionato :) un piccolo consiglio。 Cerca di utilizzare nomi in inglese anche all'interno del codice。 Primo e' un buon allenamento per parlare/scrivere inglese e poi risulta molto piu facile alle persone debuggare il codice se capiscono i nomi delle funzioni e delle variabili。在 bocca al lupo per l'applicazione :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 2017-05-01
    • 2019-05-13
    • 2017-05-21
    • 1970-01-01
    • 2021-02-09
    相关资源
    最近更新 更多