AngularJS: назначение и чтение значений двух разных кнопок отправки - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть форма с двумя типами ввода отправки. В зависимости от того, какая отправка нажата, я хочу сохранить форму как черновую или правильную.

Я думал о добавлении значения / свойства к входным данным отправки, возможно, атрибуту ng-model.

    <form ng-submit="submitNew()">  
            <div>
                Text:
                <input type="text" ng-model="myForm.text" />
            </div>
            <div>
                <input type="submit" name="correct" value="Add new" />
            </div>  
            <div>
                <input type="submit" name="draft" value="Save as draft" />
            </div>  
        </div>
    </form>

В контроллере я хотел бы добавить это как логическое значение (" myForm.isDraft ") к данным, отправленным методом POST:

myApp.controller('myAppController', ['$scope','$http','$log',
        function($scope, $http, $log) {

            $scope.submitNew = function() {
              $http({
                  method: 'POST', 
                  url: '/app/submit', 
                  data: {
                     text: $scope.myForm.text,
                     isDraft: $scope.myForm.isDraft,
                  }
              })       
          };

        } 
]);

Как это работает с входами типа отправки?

Редактировать - шаг вперед:

После изменения отправляется на:

    <div>
        <input type="submit" ng-click="isDraft = false" value="Add new" />
    </div>  
    <div>
        <input type="submit" ng-click="isDraft = true" value="Save as draft" />
    </div>

и добавляется журнал внутри $scope.submitNew = function() Я вижу, что $ scope.isDraft имеет значение true или false в зависимости от того, какая кнопка нажата. Однако в данных, отправляемых на сервер, он всегда ложен.

Контроллер сейчас:

$scope.submitNew = function() {
     $log.info("Log: isDraft: " + $scope.isDraft); 
              $http({
                  method: 'POST', 
                  url: '/app/submit', 
                  data: {
                     text: $scope.myForm.text,
                     isDraft: $scope.myForm.isDraft = $scope.isDraft,
                  }
              })       
          };

Если я изменю isDraft: $scope.myForm.isDraft = $scope.isDraft на isDraft = $scope.isDraft, он все равно не будет работать должным образом.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Попробуйте поставить его на функцию, подобную

$scope.setDraft = function(isDraft) {
   $scope.isDraft = isDraft;
   //try console.log() to see if the values are correct
   //but if its keeps return false try adding this $scope.$apply();
}

, и в вашем html будет выглядеть так

<div>
    <input type="submit" ng-click="setDraft(false)" value="Add new" />
</div>  
<div>
    <input type="submit" ng-click="setDraft(true)" value="Save as draft" />
</div>

, или вы можете вместо этого использовать предложение @ Eri c ng-submit, просто создайте новую функцию и используйте при щелчке ng вот так

$scope.submitNew = function(isDraft) {
          $http({
              method: 'POST', 
              url: '/app/submit', 
              data: {
                 text: $scope.myForm.text,
                 isDraft: isDraft,
              }
          })       
      };

и в html будет выглядеть так

<form>  
        <div>
            Text:
            <input type="text" ng-model="myForm.text" />
        </div>
        <div>
            <input type="button" ng-click="submitNew(false)" name="correct" value="Add new" />
        </div>  
        <div>
            <input type="button" ng-click="submitNew(true)" name="draft" value="Save as draft" />
        </div>  
    </div>
</form>
0 голосов
/ 21 апреля 2020

Создайте переменную, которая устанавливается нажатием ng на каждую кнопку отправки, после чего вы можете отслеживать, какая из них была нажата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...