2016-07-07 139 views
1

我正在一个简单的联系表格,这是让我疯狂。该HTML是如此简单:简单的角JS联系表格不提交

<form name="contactForm" ng-submit="contactForm.$valid && vm.submit()" novalidate> 
       <div class="form-group"> 
        <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12"> 
         <input type="text" placeholder="Full name" name="name" ng-minlength="1" max="20" 
           ng-model="vm.data.name" id="name" class="form-control" required> 
        </div> 
        <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12"> 
         <input type="email" ng-minlength="1" placeholder="Email address" name="contactemail" 
           ng-model="vm.data.contactemail" class="form-control" required> 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"> 
         <input type="text" ng-model="vm.data.subject" name="subject" ng-minlength="1" id="" 
           placeholder="Subject" class="form-control" required> 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"> 
         <textarea class="form-control" ng-model="vm.data.message" name="message" ng-minlength="1" 
            placeholder="Your message"></textarea> 
        </div> 
       </div> 

       <div class="form-group"> 
        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"> 
         <input type="submit" class="btn btn-primary" /> 
        </div> 
       </div> 
      </form> 

的NG-提交= “$联系形式有效& & vm.submit()。” 应该被提交给一个函数vm.submit()我的ContactController内,如下所示:

(function() { 
    'use strict'; 

    angular 
    .module('xyz') 
    .controller('ContactController', ContactController); 

    /** @ngInject */ 
    function ContactController($rootScope,$stamplay,Page,toastr,$log) { 
    alert('BOO!'); 

var vm = this; 
vm.data = {}; 

$rootScope.data = vm.data; 

vm.submit = function(){ 
    alert('BOO!'); 
    $stamplay.Object("contact") 
    .save(vm.data) 
    .then(onSuccess, onError); 
}; 

var onSuccess = function() { 
    toastr.success('Your message has been delivered!'); 
}; 

var onError = function() { 
    toastr.error('Seems to be a problem'); 
}; 

$rootScope.Page = Page; 
Page.setTitle('WHDS | Contact'); 
Page.setDescription('How to contact us here at the surgery'); 

// FOR DEV 

$log.info($rootScope); 
} 

})(); 

vm已经被声明为这样,但是即使当我在提交函数里面放了一个alert,我什么也得不到。

在我route.js我有以下几点:

.when('/contact', { 
    templateUrl: 'app/contact/contact.html', 
    controller: 'ContactController', 
    controllerAs: 'vm' 
    }) 

这是正确的模板,控制器名称和控制器。所有这些看似正确,我看不出为什么表单不会提交。任何想法赞赏。谢谢

+2

ng-submit使绑定角表达式提交事件。 contactForm。$ valid是一个真值检查,不是一个可以调用的函数。将它从ng-submit中移除并将ng-disabled =“!contactForm。$ valid”添加到您的提交按钮中。 – jbrown

+0

你也可以'ng-submit =“vm.submit(contactForm)”'并检查提交函数,如果给定的表单是有效的。 – Unex

+0

@jbrown感谢您的意见。我已经放弃了,但没有骰子。另外我不确定vm.data是否真的收集任何东西。我试过做$ log.info($ rootScope),但它只是一个空数组。 – devon93

回答

0

您错过了控制器中依赖关系的注入。在你的函数声明后添加这条注入语句:

ContactController.$inject=['$rootScope', '$stamplay', 'Page', 'toastr', '$log']; 

此外,ng-submit使绑定角度表达式来提交事件。 contactForm。$ valid是一个真值检查,不是一个可以调用的函数。从中删除NG-提交,并添加NG-禁用=您的提交按钮,类似这样的“联系形式$有效!”:

<form name="contactForm" ng-submit="vm.submit()" novalidate> 

<input type="submit" class="btn btn-primary" ng-disabled="!contactForm.$valid"/> 

这里的工作plunk与一些依赖关系($ stamplay,Page,toastr和$ log)被剥离出来,以便我能够解决真正的问题。

+0

嘿,感谢您花时间回答。我正在使用Swiipe框架 - https://github.com/Swiip/generator-gulp-angular/blob/master/docs/usage.md - 我想,由于文件结构,注射由/ **处理@ngInject * /语句。 – devon93

+0

所以我已经有一个index.modules列出了所有的模块。 – devon93

+0

@ devon93 - 好的,如果它仍然无法正常工作,那么如果可以的话,你可能需要共享一个相关的代码。 – jbrown