Saya memiliki sedikit masalah dengan aplikasi ini yang sedang saya bangun untuk mempelajari AngularJs.

Ini adalah aplikasi Statistik Sepak Bola. Saya memilih Tim Tuan Rumah dan Tim Tamu dari 2 menu tarik-turun. Kemudian saya harus melakukan beberapa operasi matematika dan hanya menampilkan hasilnya.

Ini kode html saya:

               <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>

Masalah saya adalah: Dalam ng-klik ini saya ingin menyampaikan tidak hanya nama, tetapi semua variabel tim, karena saya membutuhkan semua data tentang tim yang saya pilih.

Untuk saat ini pengontrol saya seperti ini dan tidak berfungsi:

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

Dikatakan kepada saya bahwa skuadra tidak ditentukan.

Ini adalah solusi saya tetapi, seperti yang saya katakan, saya ingin meneruskan fungsi semua data HomeTeam dan AwayTeam, tidak hanya nama seperti yang saya lakukan dalam kode ini. Mohon bantuannya?

1
mpeg90 20 Agustus 2017, 19:09

2 jawaban

Jawaban Terbaik

Anda menginisialisasi teams dengan fungsi async tetapi Anda memulai variabel squadra sebelumnya untuk mendapatkan nilai-nilai ini. Alih-alih menggunakan nilai skuadra di dalam pengontrol Anda, cukup gunakan $scope.teams dan hapus baris ini:

var squadra = $scope.teams;

Lalu di mana pun di pengontrol Anda, Anda menggunakan skuadra, ubah dengan $scope.teams

Juga pikirkan untuk mendefinisikan konstanta sebagai konstanta AngularJS yang terpisah alih-alih mencantumkannya di pengontrol, dan kemudian di pengontrol menyuntikkan konstanta itu. Ini membuat kode lebih bersih dan lebih dapat digunakan kembali.

0
quirimmo 20 Agustus 2017, 16:23

Masalahnya adalah karena eksekusi async. Nilai squadra tidak ditentukan di luar panggilan API karena eksekusi asinkron.

 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';
                         }
                     }
                 }
             }
         }
     }
 });
1
Vivz 20 Agustus 2017, 16:21