使用Angular设置html表单类型

问题描述:

我正在尝试使用Angular来显示包含对象的所有属性的表单。其中一些对象是密码,我希望使用这些密码表单类型。使用Angular设置html表单类型

到目前为止,我已经得到了它的类型属性设置为一个角方法的工作,但我不知道是否有它一个更清洁的角度语法(就像你如何使用NG-的href,而不是HREF)

的HTML代码示例:

<form name="siteSettingsForm" novalidate class="form-horizontal" ng-submit="save()"> 
     <div class="form-group" ng-repeat="property in siteProperties"> 
      <label for="{{ property }}" class="control-label col-sm-3">{{ property }}</label> 
      <input id="{{ property }}" type="{{ getPropertyFormType(property) }}" ng-model="site[property]" class="form-control col-sm-9" /> 
     </div> 

     <div> 
      <input type="submit" class="btn btn-primary" value="Save"/> 
     </div> 
    </form> 

控制器代码:

app.controller("settingsController", [ 
    '$scope', 
    function ($scope) { 

     $scope.site = { 
      basic_auth_username: "myUsername", 
      basic_auth_password: "hide me" 
     }; 

     $scope.siteProperties = []; 
     for (var property in $scope.site) { 
      if ($scope.site.hasOwnProperty(property)) { 
       $scope.siteProperties.push(property); 
      } 
     } 

     $scope.getPropertyFormType = function(property) { 
      if (property.indexOf("password") > -1) { 
       return "password"; 
      } else { 
       return "text"; 
      } 
     } 
}]); 

所以问题:是否有使用角来指定形式类型更好的办法?

对于后人:我结束了使用我在我的问题描述的方法

查看ng-attr部分here。你可以使用它来装饰类型属性。虽然无论如何您都不允许动态切换输入类型,但我并没有看到使用它的明显优势。你这样做的方式(当DOM被加载时硬编码)可以很好地满足你的需求。

根据对象的形状,您可能能够清理您的函数,并将其直接放入您的HTML中的Angular表达式中。