Подтвердить что ты не робот

Как обрабатывать несколько кнопок отправки в форме с помощью Angular JS?

Я использую AngularJS, и у меня есть форма, в которой пользователь может вводить данные. В конце формы я хочу иметь две кнопки, одну для "сохранения", которая сохранит и перейдет на другую страницу, а еще одна кнопка с надписью "сохранить и добавить другую", которая сохранит форму, а затем reset it - позволяет чтобы ввести другую запись.

Как это сделать в angular? Я думал, что у меня есть две кнопки отправки с тегами ng-click, но я использую ng-submit для элемента формы. Есть ли какая-то причина, по которой мне нужно использовать ng-submit - я не помню, почему я начал использовать это вместо ng-click на кнопке.

Код выглядит примерно так:

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

И в контроллере SomeController

$scope.record = {};
$scope.save = function (record) {
    $http.post('/api/save', record).
        success(function(data) {
            // take action based off which submit button pressed
        });
}
4b9b3361

Ответ 1

ngSubmit позволяет вам нажимать Enter во время ввода текстового поля для отправки. Если это поведение не важно, просто используйте 2 ngClick. Если это важно, вы можете изменить вторую кнопку, чтобы использовать ngClick. Таким образом, ваш код будет выглядеть следующим образом:

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

Ответ 2

Вы можете сохранить как ng-click, так и type="submit". В ng-click вы можете просто обновить параметр своего контроллера и подтвердить, что в событии 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>

Таким образом, этот подход позволяет избежать добавления метода и вызова избыточного кода.

Спасибо

Ответ 3

Сделайте все кнопки и type=submit. Это делает его немного чистым, не смешивая и не вставляя соответствующие входы и кнопки. Поэтому в основном вы пытаетесь выполнить один метод в своем контроллере, чтобы обрабатывать нажатие любой кнопки.

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

Итак, в вашем js файле у вас будет что-то вроде этого.

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

Ответ 4

Как я вижу, у вас есть два варианта: 1: Используйте событие ngClick на кнопке "Сохранить и добавить еще" и удалите часть "type = 'submit'. Затем в любой функции, которую вы вызываете gor ngClick, вы можете сохранить, а затем reset значения, вызвав save() внутри этой функции. 2: полностью удалите ngSubmit и просто используйте ngClicks для обеих кнопок.

Ответ 5

ng-submit имеет и другие преимущества. Например, недопустимая форма не будет отправлена. Всегда лучше использовать ng-submit вместо ng-click. Однако в вашем сценарии лучший подход будет

  • используйте кнопки ng-click.
  • проверить форму в контроллере. Имейте в виду, что ng-click представит форму, даже если она недействительна.
  • вызов двух разных $scope.functions на двух разных ng-click в somecontroller.

Надеюсь, это поможет.