javascript - Angular 表单验证,保存按钮始终禁用

标签 javascript angularjs forms validation

我有一个 Angular 形式,其中问题在数组中指定。

HTML 如下:

<form ng-controller="SupplierController" name="newSupplierForm">

  <p>Enter details for the new Supplier. The new supplier will be added to category {{selectedCategory.description}}</p>

  <p ng-repeat="field in formfields">
     <label class="field" for="{{field.name}}" ng-hide="newSupplierForm.{{field.name}}.$dirty && (newSupplierForm.{{field.name}}.$error.required || newSupplierForm.{{field.name}}.$invalid)">{{field.caption}}</label>
     <label class="error" for="{{field.name}}" ng-show="newSupplierForm.{{field.name}}.$dirty && (newSupplierForm.{{field.name}}.$error.required  || newSupplierForm.{{field.name}}.$invalid)">{{field.caption}}</label>
     <input type="{{field.type}}" name="{{field.name}}" ng-model="newSupplier[field.name]" ng-required="{{field.required}}">    
  </p>
  <button ng-disabled="newSupplierForm.$invalid" ng-click="saveSupplier()">Save</button>

</form>

Controller 是:

financeApp.controller('SupplierController', function($scope, $http) {

$scope.formfields = [
    {caption:'Name :', name:'name', required:"true", type:"text"},
    {caption:'Address :', name:'address1', required:"true", type:"text"},
    {caption:' :', name:'address2', required:"true", type:"text"},
    {caption:' :', name:'address3', required:"", type:"text"},
    {caption:' :', name:'address4', required:"", type:"text"},
    {caption:'Post Code :', name:'postcode', required:"", type:"text"},
    {caption:'Email :', name:'email', required:"", type:"email"},
    {caption:'Phone :', name:'phone', required:"", type:"text"}
];

$scope.newSupplier = {};

$scope.saveSupplier = function() {
    $http.post('/finance/supplier', newSupplier).success(function(data) {
        alert(data);
    });     
}

});

一切似乎都工作正常,只是“保存”按钮永远不会启用,即使表单有效。到目前为止我所做的研究表明这应该有效,但事实并非如此。

示例:Disable a button if at least one input field is empty using ngDisabled

我做错了什么?

此外,有什么方法可以总体改进此代码吗?这是我第一次尝试 Angular。

最佳答案

尝试 ng-required="field.required",不带花括号,因为这已经需要一个 Angular 表达式。

在 Controller 内部,将 required 视为 true 或 false,而不是字符串。

<小时/>

至于如何改进这一点,您使用的方法是可以的,但是如果您的表单始终具有相同的字段(它不是动态的),您应该为每个字段创建 html 元素,而不是在 Controller 内声明它们。

Controller 应该控制 View 的行为,而不是显示哪些字段(在非动态 View 中)。

关于javascript - Angular 表单验证,保存按钮始终禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32979736/

相关文章:

angularjs - 如何在 Protractor 测试中单击选择框中的选项?

VB.NET 迭代表单标签

python - 主页上的 Django UserCreationForm

forms - 支柱 2 : updating a list of objects from a form with model driven architecture

javascript - 有没有像 JSX 'partials' 这样的东西?

javascript - 我认为这是另一个 React/JS 上下文问题,我如何提取这个变量?

javascript - 侧边栏在顶部打开?

javascript - 刷新 Angularjs 上的 html 更改

angularjs - 如何在现有项目中使用 bower ?

c# - 在 C# 中模拟 Javascript 'doPostBack()'