0

我正在尝试使用ng-repeat创建用户表单,但我有点挣扎。当我使用数组中的名称将输入绑定到范围时,signupForm.modelBindings名称被设置为input值,显然这不是我想要的。如何将输入绑定到范围,同时将输入留空?

PS:感觉就像我试图以一种非常笨拙的方式做到这一点,有没有更好的方法来实现我想要的,而不必创建大量包含这些值的数组?

编辑:我找到了一个更好的解决方案,但我仍然遇到输入不为空的问题。看看更新的代码:

<tr ng-repeat="row in signupForm" 
    class="data-row">
    <td class="label-cell data-cell">
        <label ng-bind="(row.description) + ':'"></label>
    </td>
    <td class="data-cell">
        <input type="{{row.type}}" ng-model="row.model"
               placeholder="{{row.description}}" 
               class="round input">
    </td>
    <td class="error-cell data-cell">
        <span class="error">*</span>
    </td>
</tr>

表格信息:

$scope.signupForm = [
    {
        description: 'Firstname',
        type: 'text',
        model: 'user.firstname'
    },
    {
        description: 'Lastname',
        type: 'text',
        model: 'user.lastname'
    },
    {
        description: 'Date of birth',
        type: 'text',
        model: 'user.dateOfBirth'
    },
    {
        description: 'Country',
        type: 'text',
        model: 'user.country'
    },
    {
        description: 'Display name',
        type: 'text',
        model: 'user.displayName'
    },
    {
        description: 'E-mail',
        type: 'email',
        model: 'user.email'
    },
    {
        description: 'Password',
        type: 'password',
        model: 'user.firstname'
    },
    {
        description: 'Confirm password',
        type: 'password',
        model: 'user.confirmPassword'
    }
]

我尝试通过将范围设置为空字符串来清除它,但它不起作用:

$scope.firstname, $scope.lastname, $scope.dateOfBirth, 
$scope.country, $scope.displayName, $scope.email, 
$scope.password, $scope.confirmedPassword = '';
4

1 回答 1

1

让我们有这个对象:

$scope.user = {
     firstName: '',
     lastName: '',
     ...
}

为您的表单提供如下信息:

$scope.signupForm = [
{
    description: 'Firstname',
    type: 'text',
    model: 'firstname'
},
{
    description: 'Lastname',
    type: 'text',
    model: 'lastname'
},

您应该可以通过这种方式访问​​它:

ng-model="user[row.model]"

编辑(基于意见):

根据具体情况,此解决方案可能是一个不错的选择。这样,您只需发送对象“用户”来保存它。

我会做的有点不同。我会从后端收到这个对象:

[{
   description : "Firstname",
   type: "text",
   value: ""
 },
 {
   description:
   ...

我会这样拥有我的 ng-model :

 ng-model="row.value"

而且因为我有点懒,我会把描述、类型……发回后端。

如果这种模型有时应该改变,第二种选择可能更容易。

于 2015-02-17T15:11:31.160 回答