6

Quello che sta accadendo qui:

voglio il pulsante "cancella prenotazione" per avere un timeout su di esso dopo la sua cliccato. Al primo clic cambia per mostrare il pulsante "conferma cancellazione". Dopo alcuni secondi ritorna su "cancella prenotazione".

mia console mi dà:

TypeError: $timeout is not a function 

Sto usando AngularJS $ timeout:

regolatore:

'use strict'; 

module.controller('ReservationItemCtrl', ['$scope', '$stateParams', '$RPC', 
    function($scope, $stateParams, $RPC, $timeout) { 


......other stuff....... 
......other stuff....... 

    $scope.toggleCancelReservation = function(reservation) { 
     reservation.clickedcancel = true; 
     $timeout(function(){reservation.clickedcancel = false}, 4000); 
    }; 
} 
]); 

modello:

<button ng-show="!reservation.value.deleted && !deleted.value" 
      class="btn btn-danger" 
      ng-show="canCancel(reservation)" ng-if="!reservation.clickedcancel" ng-click="toggleCancelReservation(reservation)"> 
    Cancel With Refund 
    </button> 
    <button type="button" class="btn btn-danger" ng-if="reservation.clickedcancel == true" ng-click="deleteReservation();" style="margin-top: -4px;"> 
    Confirm Cancellation 
    </button> 

sto con precisione ottenendo il ma a n per cambiare quando viene cliccato per primo e poi se cliccato di nuovo cancella/cancella correttamente la prenotazione, ma se non faccio nulla dopo il primo clic il timeout non ritorna mai al pulsante originale. Nella mia console vedo quello $timeout is not a function per qualche motivo? L'ho incluso nel mio controller. Mi sto perdendo qualcosa?

+1

hai tentato di risolvere il problema con l'aggiunta di '$ timeout' nel elenco di servizi iniettati nel controller? –

risposta

7

hai dimenticato la notazione in linea di $timeout:

'use strict'; 
module.controller('ReservationItemCtrl', ['$scope', '$stateParams', '$RPC', '$timeout', 
    function ($scope, $stateParams, $RPC, $timeout) { 
      ......other stuff....... 
      ......other stuff....... 
     $scope.toggleCancelReservation = function (reservation) { 
      reservation.clickedcancel = true; 
      $timeout(function() { 
       reservation.clickedcancel = false 
      }, 4000); 
     }; 
    } 
]); 
2

Bisogna includere $ timeout nelle dipendenze del controller

'use strict'; 

module.controller('ReservationItemCtrl', ['$scope', '$stateParams', '$RPC','$timeout', 
    function($scope, $stateParams, $RPC, $timeout) {