在ng-repeat

时间:2017-06-13 17:30:59

标签: javascript html angularjs html5

我正在重新提出问题,因为我之前遗漏了重要信息。

我有一个日期模型,可根据以下内容更改输入值:AngularJS: How to set default value to ng-model="searchText"?

                <div class="modal-body">
                    <div style="display:inline-block; margin-bottom:20px;">
                        <h3 style="float:left;">Set All Dates: </h3>
                            <span style="padding-top:15px; padding-left:7px;" class="input-group date">
                                <input id="setAllEffectiveDates" type="text" data-ng-model="date" value="" class="form-control input-sm">
                                <span class="input-group-addon"><i class="glyphicon glyphicon-th"></i></span>
                            </span>
                    </div>
                    <table class="table table-bordered">
                        <tbody data-ng-repeat="(associatedContract,ndc) in ndcs">
                            <tr>
                                <td>
                                    <div class="input-group date updateIt">
                                        <input id="effectiveDate" type="text" data-ng-model="date" class="form-control input-sm">
                                        <span class="input-group-addon"><i class="glyphicon glyphicon-th"></i></span>
                                    </div>
                                </td>
                            </tr>

                        </tbody>
                    </table>
                </div>

以上按预期工作,当我选择日期时,所有输入都会更改为所选日期。

我的问题是我想在字段中添加默认值。此值是一个在此处迭代的变量:<tbody data-ng-repeat="(associatedContract,ndc) in ndcs">

<input id="effectiveDate" type="text" data-ng-model="date" ng-init="date=ndc.value" class="form-control input-sm">

添加ng-init="date=ndc.value"确实会按预期添加来自控制器的默认值。但它删除了数据绑定。更改input id="setAllEffectiveDates"时,该字段不再更新。

如何使用默认值但数据绑定是否有效?

编辑:

更新的功能我添加了ng-change:

<input id="setAllEffectiveDates" ng-change="updateEffectiveDates(date)" type="text" data-ng-model="date" value="" class="form-control input-sm">

然后做了一个功能:

    $scope.updateEffectiveDates = function (date) {
        angular.forEach($scope.ndcs, function (ndc) {
            ndc.value = date;
        });
        console.log($scope.ndcs);
    };

看起来它更新了模型而不是页面上的字段。

1 个答案:

答案 0 :(得分:1)

我怀疑ng-init正在为date创建的每个新范围创建一个新的ng-repeat变量,因此它不再受控制器的绑定。如果您只需要一个日期,请尝试将其设置为控制器中存在的对象:

控制器:

$scope.obj = {
    date: null
};

查看:

<input ng-init="obj.date=ndc.value">

编辑:只需绑定到每个数组元素上已有的日期:

data-ng-model="ndc.date" ng-change="setOtherDates()"

最终答案:

<input id="setAllEffectiveDates" ng-change="updateEffectiveDates(date)" type="text" data-ng-model="date" value="" class="form-control input-sm">

然后:

<input id="effectiveDate" type="text" data-ng-model="ndc.value" class="form-control input-sm">

功能:

    $scope.updateEffectiveDates = function (date) {
        angular.forEach($scope.ndcs, function (ndc) {
            ndc.value = date;
        });
        console.log($scope.ndcs);
    };