2015-12-16 5 views
5

Obecnie pracuję w małej INFORMACYJNA wykorzystaniem angularjs Moim zdaniem mam następujący przyciskangularjs funkcję o nazwie tylko najpierw kliknąć onClick

<md-button class="md-primary" ng-click="editUser(user, $event)">Edit</md-button> 

metoda editUser wygląda mniej więcej tak:

$scope.editUser = function (user, $event) { 

    $scope.userToEdit = user; 

    $mdDialog.show({ 
      controller: DialogController, 
      targetEvent: $event, 
      templateUrl: '/js/modules/user/views/edit.tmpl.html', 
      parent: angular.element(document.body), 
      clickOutsideToClose: true, 
      scope: $scope 
     }) 
     . 
     then(function (answer) { 
      if (answer == "save") { 
       for (right in $scope.allSystemRightsStatements) { 
        if ($scope.allSystemRightsStatements[right].selected) { 
         if($scope.userToEdit.rights==null){ 
          $scope.userToEdit.rights = []; 
         } 
         $scope.userToEdit.rights.push($scope.allSystemRightsStatements[right]); 
        } 
       } 
       $scope.updateUser($scope.userToEdit); 
      } 
      $scope.userToEdit = {}; 
     }, function() { 
      $scope.userToEdit = {}; 
     }); 
}; 

$scope.updateUser = function (user) { 
    //userService.updateUser makes a $http PUT request 
    var promise = userService.updateUser(user); 
    promise.then(function (result) { 
     $mdToast.show(
      $mdToast.simple(result.message) 
       .position($scope.getToastPosition()) 
       .hideDelay(3000) 
     ); 
    }, function (reason) { 
     $mdToast.show(
      $mdToast.simple(reason) 
       .position($scope.getToastPosition()) 
       .hideDelay(3000) 
     ); 
    }, function (update) { 
    }); 
}; 

Teraz okno jest ładnie wyświetlane, a funkcja odpowiedzi jest również wywoływana, wszystko zgodnie z oczekiwaniami.

Jednak po ponownym kliknięciu przycisku funkcja editUser nie jest wykonywana. Tak jakby zdarzenie onClick z przycisku zostało usunięte przy zamknięciu okna dialogowego.

Każda pomoc w rozwiązywaniu tego problemu jest bardzo ceniona, Dzięki

+0

widzisz błąd w dzienniku konsoli? –

+0

Twój błąd może być w ** .. małej logice ** części twojego kodu ... Może to być również spowodowane tym, że wywołujesz metodę asynchroniczną z '$ scope.updateUser', a następnie od razu ustawiając '$ scope.userToEdit' na obiekt empy. '$ scope.updateUser' może nie mieć czasu, aby zakończyć to, co zamierzał zrobić i ustawić przekazany obiekt na pusty obiekt ... – ezcoding

+0

Żaden dziennik konsoli nie jest pusty :-( Aktualizacja jest rzeczywiście wykonywana poprawnie (jak zostało to odzwierciedlone w bazie danych) Dodam małą logikę do wyjaśnienia – bwright

Odpowiedz

3

Jak powiedział here

to chyba dobry pomysł, aby wyraźnie wspomnieć, że zakres zostanie zniszczony na ukrycie okna (tak ludzie nie powinni przekazywać bezpośrednio zakresu kontrolnego $).

(dotyczące zakresu jesteś przechodzącej do mdDialog)

Tak, jak zakres jest zniszczony, kątowy nie jest wiążący swój przycisk z jakimkolwiek działaniem

+0

Dla wyjaśnienia: usunąłem 'scope: $ scope' z wywołania' $ mdDialog.show' i dodałem 'locals: {user: user, .. inne obiekty}' – bwright