Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Angular设置html表单类型_Javascript_Angularjs_Forms_Angularjs Directive - Fatal编程技术网

Javascript 使用Angular设置html表单类型

Javascript 使用Angular设置html表单类型,javascript,angularjs,forms,angularjs-directive,Javascript,Angularjs,Forms,Angularjs Directive,我试图使用Angular来显示包含对象所有属性的窗体。其中一些对象是密码,我想对这些对象使用密码表单类型 到目前为止,我已经通过将type属性设置为angular方法使其工作,但我想知道是否有更清晰的angular语法(比如如何使用ng href而不是href) 示例html代码: <form name="siteSettingsForm" novalidate class="form-horizontal" ng-submit="save()"> <d

我试图使用Angular来显示包含对象所有属性的窗体。其中一些对象是密码,我想对这些对象使用密码表单类型

到目前为止,我已经通过将type属性设置为angular方法使其工作,但我想知道是否有更清晰的angular语法(比如如何使用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>

所以问题是:有没有更好的方法使用Angular来指定表单中的类型?

查看ng attr部分。您可以使用它来修饰type属性。尽管您无论如何都不允许动态切换输入类型,但我看不到以这种或那种方式使用它的明显优势。这样做(加载DOM时进行硬编码)就可以满足您的需要


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

留给后代:我最终使用了问题中描述的方法

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";
            }
        }
}]);