Comment gérer plusieurs boutons soumettre sous une forme en utilisant Angular JS?

J'utilise AngularJS et j'ai un formulaire où l'utilisateur peut entrer des données. À la fin du formulaire, je veux avoir deux boutons, un pour "enregistrer" qui sauvegardera et ira à une autre page, et un autre bouton intitulé "enregistrer et Ajouter un autre" qui sauvera le formulaire et puis le réinitialiser - leur permettant d'entrer une autre entrée.

Comment puis-je accomplir ceci en angle? Je pensais que je pourrais avoir deux boutons soumettre avec les étiquettes de ng-click, mais j'utilise ng-submit sur l'élément de formulaire. Est-il pourquoi j'ai BESOIN d'être à l'aide de ng-soumettre - je ne me souviens pas pourquoi j'ai commencé à utiliser qu'au lieu de ng-cliquez sur le bouton.

Le code ressemble à quelque chose comme:

<div ng-controller="SomeController">
    <form ng-submit="save(record)">
        <input type="text" name="shoppingListItem" ng-model="record.shoppingListItem">
        <button type="submit">Save</button>
        <button type="submit">Save and Add Another</button>
    </form>
</div>

Et dans le contrôleur SomeController

$scope.record = {};
$scope.save = function (record) {
    $http.post('/api/save', record).
        success(function(data) {
            // take action based off which submit button pressed
        });
}
22
demandé sur Rishabh 2014-11-19 22:45:13

7 réponses

ngSubmit vous permet d'appuyer sur Enter en tapant sur la zone de texte à soumettre. Si ce comportement n'est pas important, il suffit d'utiliser 2 ngClick. Si elle est importante, vous pouvez modifier le deuxième bouton à utiliser ngClick. Ainsi votre code devient:

<div ng-controller="SomeController">
    <form ng-submit="save(record)">
        <input type="text" name="shoppingListItem" ng-model="record.shoppingListItem">
        <button type="submit">Save</button>
        <button ng-click="saveAndAdd(record)">Save and Add Another</button>
    </form>
</div>
13
répondu Buu Nguyen 2014-11-19 19:59:26

Vous pouvez garder les deux ng-click et type="submit". Dans le ng-click Vous pouvez simplement mettre à jour un paramètre de votre controller et le valider en cas de ng-submit:

<div ng-controller="SomeController">
<form ng-submit="save(record)">
    <input type="text" name="shoppingListItem" ng-model="record.shoppingListItem">
    <button type="submit">Save</button>
    <button type="submit" ng-click="SaveAndAddClick=true">Save and Add Another</button>
</form>

donc cette approche vous évite d'ajouter une méthode puis d'appeler un code redondant.

Merci

31
répondu Kris8889 2016-07-07 08:29:43

Faire tous les boutons et type=submit. Il le rend un peu plus propre et ne mélange pas et des entrées et des boutons assortis. Donc, fondamentalement, vous essayez d'exécuter une méthode dans votre contrôleur pour gérer les deux clic sur le bouton.

<div ng-controller="SomeController as sc">
        <form ng-submit="sc.execute(record)">
            <input type="text" name="shoppingListItem" ng-model="record.shoppingListItem">
            <button type="submit" ng-model="sc.saveButtonVal" ng-click="sc.saveButtonVal=true>Save</button>
            <button type="submit" ng-model="sc.saveAndAddButtonVal" ng-click="sc.saveAndAddButtonVal=true">Save and Add Another</button>
        </form>
</div>

donc, dans votre fichier js vous aurez quelque chose comme ça.

function SomeController() {
        var sc = this;

        sc.execute = function(record) {
            //initialize the vars
            sc.saveButtonVal = false;
            sc.saveAndAddButtonVal = false;

            sc.resetButtonValues = function() {
                sc.saveButtonVal = false;
                sc.saveAndAddButtonVal = false;
            };

            if (sc.saveButtonVale) {
                //do save only operation
            } else if (sc.saveAndAddButtonVal) {
                //do save and add op
            }

           // reset your button vals
           sc.resetButtonValues();
    }
}
3
répondu ram mil 2017-02-17 00:54:10

Comme je le vois, vous avez deux options: 1: utilisez un événement ngClick sur le bouton" save and add another "et supprimez la partie" type='submit'". Ensuite, dans n'importe quelle fonction que vous appelez Gor the ngClick, vous pouvez enregistrer puis Réinitialiser les valeurs, en appelant save() dans cette fonction. 2: Retirez le ngSubmit tout à fait et utilisez simplement les encliquetages ngClicks pour les deux boutons.

2
répondu Samuel Duzett 2014-11-19 19:58:16

ng-soumettre a d'autres avantages. Par exemple, un formulaire non valide ne sera pas soumis. Il est toujours préférable d'utiliser ng-submit au lieu de ng-click. Cependant, dans votre scénario, la meilleure approche serait

  1. utilisation ng-cliquez sur les boutons.
  2. valider le formulaire dans le contrôleur. Gardez à l'esprit que ng-click soumettra le formulaire même s'il n'est pas valide.
  3. appeler deux différents $ scope.fonctions sur deux ng-click différents dans le somecontroller.

j'Espère que ça aide.

0
répondu debugmode 2016-05-22 15:11:03

Supprimer ng-submit de l'élément "form" et définir les fonctions ng-click séparément sur chaque bouton avec le type 'submit'.Pour la vérification de l'invalidation, définissez la propriété name dans l'élément tag form. Et vérifier la validation dans la fonction scope.

<div ng-controller="SomeController">
<form name="saveForm">
    <input type="text" name="shoppingListItem" ng-model="record.shoppingListItem">
    <button type="submit" ng-click="save(record)">Save</button>
    <button type="submit" ng-click="saveOther(record)">Save and Add Another</button>
</form>

Fonction De Portée:

$scope.record = {};

$scope.save = function (record) {    

if(this.saveForm.$valid)
  {

    $http.post('/api/save', record).
    success(function(data) {
        // take action based off which submit button pressed
    });
  }
}
0
répondu Jasmin Akther Suma 2018-07-12 09:53:13

si quelqu'un cherche une approche simple alors il suffit de créer un drapeau et basculer entre le bouton et soumettre.

<button type="{{isButton == true ? 'button' : 'submit'}}" >Save</button>
<button type="{{!isButton == true ? 'button' : 'submit'}}" >Update</button>

Besoin de gérer l'indicateur selon l'action de l'utilisateur.

0
répondu ARJUN 2018-09-19 13:18:58