我可以触发形式从控制器提交?(Can I trigger a form submit from a

2019-08-23 02:02发布

我想做一个传统的形式从控制器内提交。 这种情况的出现,我想打我的Web服务器上的路线,然后重定向到它的响应,这是我可以在HTML常规形式做的,但我也想按下提交按钮时,做其领域一些验证,并如果验证失败,我不想做的路线。

我知道NG-有效的,但我只想当按钮被击中的验证发生。

有没有一种方法,以有条件做一个形式,从控制器内提交?

Answer 1:

您可以添加提交方法用FormController。 我这样做:

<form ng-form-commit action="/" name='payForm' method="post" target="_top">
    <input type="hidden" name="currency_code" value="USD">
    <button type='button' ng-click='save(payForm)'>buy</button>
</form>

.directive("ngFormCommit", [function(){
    return {
        require:"form",
        link: function($scope, $el, $attr, $form) {
            $form.commit = function() {
                $el[0].submit();
            };
        }
    };
}])

.controller("AwesomeCtrl", ["$scope", function($scope){
   $scope.save = function($form) {
     if ($form.$valid) {
         $form.commit();
     }
   };
}])


Answer 2:

你尝试使用NG-提交指令的形式? 您可能您的验证后,返回真/假。

调节器

app.controller('MainCtrl', ['$location', function($scope, $location) {
  $scope.submit = function(user) {
    var isvalid = true;
    // validation 
    if (isvalid) {
        $http.get('api/check_something', {}).then(function(result) {
            $location.path(result.data);
        });
        return true;
    }
    return false; //failed
  }
});

HTML(你不能有一个动作属性)

<form name="formuser" ng-submit="submit(user)">
    <input type="text" ng-model="user.firstname" />
    <input type="text" ng-model="user.lastname" />
    <button type="submit">Submit</button>
</form>


Answer 3:

这是“不是角”的方式做到这一点,但你可以使用JavaScript的香草提交表单。 例如,你可以给形式的ID,做:

document.getElementById('myForm').submit()

或者如果你有一个提交按钮,您可以单击它:

document.getElementById('myForm-submit').click()

我发现的第一个没有跟上(我使用它与一个jQuery插件是没有角的替代项目)中的数据绑定,但第二个不停的绑定。 我认为这与JQuery的小部件是如何写的去做。

你可以看到更多的触发与这里的香草JS形式:

如何使用javascript提交表单?



Answer 4:

如何刚刚走出右禁用,直到形式是有效的提交按钮:

<button type="submit" ng-disabled="form.$invalid">Submit</button>

看看这个类似的问题,我有: - “myForm的$有效” AngularJS表单验证与指令不能很好地满足我的权利



Answer 5:

从@ ReklatsMasters的回答扩大,如果你想在提交表单前更改值 ,你可以做这样的...

<form ng-form-commit action="/" name='payForm' method="post" target="_top">
    <input type="hidden" id="currency_code" name="currency_code" value="USD">
    <button type='button' ng-click='save('GBP', payForm)'>buy</button>
</form>

.directive("ngFormCommit", [function(){
    return {
        require:"form",
        link: function($scope, $el, $attr, $form) {
            $form.commit = function($newCurrency) {
                $el[0].querySelector('#currency_code').value = $newCurrency;
                $el[0].submit();
            };
        }
    };
}])

.controller("AwesomeCtrl", ["$scope", function($scope){
   $scope.save = function($newCurrency, $form) {
     if ($form.$valid) {
         $form.commit($newCurrency);
     }
   };
}])


Answer 6:

$scope.payForm.$setSubmitted();

设置形式到它的$提交状态。 这也将在表格的所有孩子和家长形式设置$提交

https://docs.angularjs.org/api/ng/type/form.FormController#$setSubmitted



文章来源: Can I trigger a form submit from a controller?