简体   繁体   English

AngularJS 1.6.8:无法提交表单并显示成功消息

[英]AngularJS 1.6.8: Unable to submit form and display success message

I have a simple query submission form with name, email and query fields and a component with a controller function having the submit function to submit the form. 我有一个带有名称,电子邮件和查询字段的简单查询提交表单,以及一个具有控制器功能的组件,该组件具有提交表单的提交功能。

I am using ng-submit directive in the <form></form> tag to submit the user input and display a success message on submission. 我在<form></form>标记中使用ng-submit指令来提交用户输入并在提交时显示成功消息。

below is the code for the respective files. 以下是各个文件的代码。

contact.html

<div ngController="contactController as vm">
        <div class="heading text-center">
        <h1>Contact Us</h1>
    </div>
    <div>
        <form class="needs-validation" id="contactForm" novalidate method="post" name="vm.contactForm" ng-submit="saveform()">
            <div class="form-group row">
                <label for="validationTooltip01" class="col-sm-2 col-form-label">Name</label>
                <div class="input-group">
                    <input type="text" class="form-control" id="validationTooltipName" placeholder="Name" ng-model="vm.name" required>
                    <div class="invalid-tooltip">
                        Please enter your full name. 
                    </div>
                </div>
            </div>
            <div class="form-group row">
                <label for="validationTooltipEmail" class="col-sm-2 col-form-label">Email</label>
                <div class="input-group">
                    <div class="input-group-prepend">
                        <span class="input-group-text" id="validationTooltipUsernamePrepend">@</span>
                    </div>
                    <input type="email" class="form-control" id="validationTooltipEmail" placeholder="Email" 
                    aria-describedby="validationTooltipUsernamePrepend" ng-model="vm.email" required>
                    <div class="invalid-tooltip">
                        Please choose a valid email.
                    </div>
                </div>
            </div>

            <div class="form-group row">
              <label for="validationTooltip03" class="col-sm-2 col-form-label">Query</label>
              <div class="input-group">
                    <input type="text" class="form-control" id="validationTooltipQuery" ng-model="vm.query" placeholder="Query" required>
                    <div class="invalid-tooltip">
                        Please write your Query.
                    </div>
                </div>
            </div>
            <div class="btn-group offset-md-5">
                <button class="btn btn-primary" type="submit">Submit</button>
                <button class="btn btn-default" type="button" id="homebtn" ng-click="navigate ('home')">Home</button>  
            </div>
          </form>
          <span data-ng-bind="Message" ng-hide="hideMessage" class="sucessMsg"></span>
    </div>
</div>

contact.component.js

angular.module('myApp')
  .component('contactComponent', {
  restrict: 'E',
  $scope:{},    
  templateUrl:'contact/contact.html',
  controller: contactController,
  controllerAs: 'vm',
  factory:'userService',
  $rootscope:{}
});

function contactController($scope, $state,userService,$rootScope) {
  var vm = this;
  $scope.navigate = function(home){
    $state.go(home)
  };
  $scope.saveform = function(){

    $scope.name= vm.name;
    $scope.email= vm.email;
    $scope.query= vm.email;


    $scope.hideMessage = false;
    $scope.Message = "Your query has been successfully submitted."

  };
  $scope.user = userService;
};

//localStorage code

function userService($rootScope) {
  var service = {
    model: {
        name: '',
        email: '',
        query:''
    },
    SaveState: function () {
        sessionStorage.userService = angular.toJson(service.model);
    },
    RestoreState: function () {
        service.model = angular.fromJson(sessionStorage.userService);
    }
  }
  $rootScope.$on("savestate", service.SaveState);
  $rootScope.$on("restorestate", service.RestoreState);
  return service;

  $rootScope.$on("$routeChangeStart", function (event, next, current) {
    if (sessionStorage.restorestate == "true") {
        $rootScope.$broadcast('restorestate'); //let everything know we need to restore state
        sessionStorage.restorestate = false;
    }
  });
  //let everthing know that we need to save state now.
  window.onbeforeunload = function (event) {
    $rootScope.$broadcast('savestate');
  };
};

UPDATE: On Submit, When I check the response in network tab in dev tools, I do not see the submitted values. 更新:在提交时,当我在开发工具中的“网络”选项卡中检查响应时,看不到提交的值。 All I see is the markup. 我所看到的只是标记。

In your template, the name of the method is saveform : 在您的模板中,方法的名称为saveform

ng-submit="saveform()"

But in your controller, it's save : 但是在您的控制器中,它可以save

$scope.save = function() { ... }

Rename it to saveform : 将其重命名为saveform

$scope.saveform = function() { ... }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM