2017-06-13 47 views
0

我在重复提问,因为我之前忽略了重要信息。向ng-repeat中的字段添加默认值时数据绑定停止

我有一个日期模型,它改变了基于这个输入的值: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-变化:

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

这看起来像它更新模型,但不字段在页面上。

+0

NG-INIT用于调用您希望在该项目被实例化执行的功能。一般建议绝对不要用于任何事情。你能在你的控制器中初始化模型到所需的值吗? –

+0

@MikeFeltman是的,但有多个日期值,这就是为什么有ng重复。你是在说一个数组还是其他的东西? –

+0

模型中只有一个日期。您的意思是使用associatedContract或ndc对象上提供的日期属性吗? –

回答

1

我怀疑ng-init正在对由ng-repeat每个新创建的作用域的新date变量,因此它不会从您的控制器了绑定。如果你只需要一个日期,尝试将其设置为存在于你的控制器对象:

控制器:

$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); 
    }; 
+0

这会重新启用数据绑定,但它也会将所有默认传入值设置为1个特定值。 ng-repeat有多个进来。 –

+0

也许你需要做:'data-ng-model =“ndc.date”ng-init =“ndc.date = ndc.value”' –

+0

好吧,如果我使用上述。如何在ng-update之后更改所有ndc.date值?我是否也将选择器字段模型设置为ndc.date?即使它在ng-repeat之外? '' –

相关问题