2016-04-12 5 views
0

einreichen Ich habe diese 2-Taste, die sparen und sparen, ist ...Taste ändern, wenn der Benutzer Form

<div ng-switch on="isLoading"> 
<div ng-switch-when="true"> 
    <button type="button" class="btn btn-primary btn-block disabled">Saving ...</button> 
</div> 

<div ng-switch-when="false"> 
    <button type="submit" class="btn btn-primary btn-block" ng-disabled="!allowSubmit(addUser)" ng-click="add();">Save</button> 
</div> 
</div> 

Was ich will, ist, dass, bevor Benutzer klicken Sie das Formular abzuschicken, Taste bleiben, wie ‚Speichern‘ und nach Benutzer klicken auf die Schaltfläche Speichern, es wird für 2 Sekunden in die Schaltfläche "Speichern ..." geändert. Ich habe versucht und geplant, $ Timeout zu verwenden, aber es stellt sich heraus, dass das ganze Formular um 2 Sekunden verzögert wurde.

$dialogScope.add = function() { 
       if ($dialogScope.user.password != $dialogScope.user.confirmpassword && $dialogScope.user.username) { 
        $dialogScope.hasError = true 
        $dialogScope.errorMessage = "Password does not match"; 
        return $dialogScope.errorMessage; 
       } 
       var copy = angular.copy($dialogScope.user); 
      } 
      $timeout(function() { 
       $dialogScope.hasError = false; 
       $scope.users.push(copy); 
       $dialogScope.closeThisDialog(); 
      }, 2000); 

wie soll ich das machen?

+0

Kann ich sehen, wo Sie Ihre req tun du? der Code, der nach der Zeitüberschreitung ist – amrdruid

+0

Übrigens gibt es eine Reihe von Möglichkeiten, wie Sie diese Dinge (Validierung, Fehlermeldungen, Laden von Nachrichten, ...) auf eine sauberere/netter Weise tun können. Nach einer schnellen Google-Suche fand ich [diese] (https://www.lullabot.com/articles/processing-forms-in-angularjs) zum Beispiel. Habe es nicht im Detail ausgecheckt, aber du könntest ein paar nette Ideen davon bekommen – Aides

Antwort

0

Um ehrlich zu sein, ich habe es nicht getestet, aber so etwas wie das funktionieren sollte

$dialogScope.add = function() { 
    if ($dialogScope.user.password != $dialogScope.user.confirmpassword && 
     $dialogScope.user.username) 
    { 
     $dialogScope.hasError = true 
     $dialogScope.errorMessage = "Password does not match"; 
     return $dialogScope.errorMessage; 
    } 
    var copy = angular.copy($dialogScope.user); 

    $dialogScope.hasError = false; 
    $scope.users.push(copy); 
    $dialogScope.closeThisDialog(); 
    $scope.isLoading = true; 

    $timeout(function() { 
     $scope.isLoading = false; 
    }, 2000); 
} 

Fühlen Sie sich frei zu äußern, wenn es nicht der Fall ist.

+0

versucht, funktioniert aber immer noch nicht – sue

+0

Könntest du eine Geige deines Codes bereitstellen? – Aides

+0

https://jsfiddle.net/5fntcdv5/ – sue

0

Ng-Switch ist nicht notwendig.

Ich würde dies tun:

HTML:

<div ng-switch-when="true"> 
    <button type="button" class="btn btn-primary btn-block disabled">{{btnText}}</button> 
</div> 

JS:

$dialogScope.btnText = 'save'; 
$dialogScope.add = function() { 
       if ($dialogScope.user.password != $dialogScope.user.confirmpassword && $dialogScope.user.username) { 
        $dialogScope.hasError = true 
        $dialogScope.errorMessage = "Password does not match"; 
        return $dialogScope.errorMessage; 
       } 
       var copy = angular.copy($dialogScope.user); 
       $dialogScope.btnText = 'saving...'; 
      } 
      $timeout(function() { 
       $dialogScope.hasError = false; 
       $scope.users.push(copy); 
       $dialogScope.closeThisDialog(); 
       $dialogScope.btnText = 'save'; 
      }, 2000); 
+0

es gibt mir einen Fehler statt angular.js: 12477 Fehler: [$ compile: ctreq] http://errors.angularjs.org/1.4.7/$compile/ctreq? p0 = ngSwitch & p1 = ngSwitchWhen – sue

+0

Dies ist Controller Fehler. Um zu antworten, muss ich Ihren Code sehen. –

+0

https://jsfiddle.net/whrpjtot/ bieten Ihnen die Geige – sue

0

Ich muss die Sache mit Ladesymbol speichern tun. Button sollte beim Bearbeiten speichern. Sie können dies auch mithilfe einer Variablen tun.

Zum Beispiel;

Vor-Knopf klicken,

$scope.loading = false; 

auf Knopf klicken

$scope.loading = true; 

HTML

<button type="submit" ng-disabled="myForm.$invalid">  
    <span data-ng-hide="loading"><i class="fa fa-save"></i>Save</span> 
    <span data-ng-show="loading"><i class="fa fa-refresh fa-spin"></i>Saving</span>  
</button> 
Verwandte Themen