我在隔离下面的 date-picker-search 指令的范围时遇到了一些问题。
(function(){
'use strict';
angular.module('ganeshaApp')
.directive('datePickerSearch', function(){
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ngModelCtrl){
$(function(){
element.datepicker({
dateFormat: 'd/m/yy',
onSelect: function(date){
scope.date = date;
scope.$apply();
}
})
});
}
}
})
})();
在我的第一次尝试中,我尝试使用此代码,但正如预期的那样,使用 ng-model="date" 更改一个输入会更新所有使用相同 ng-model 引用指令的输入。
<tr>
<td>Publication Date:</td>
<td greyed-dates>
between
<div class="start inner-addon right-addon">
<i class="glyphicon glyphicon-calendar"></i>
<input type="text" ng-model="date"
date-picker-search placeholder="dd/mm/yyyy"/>
</div>
<span>and</span>
<div class="end inner-addon right-addon">
<i class="glyphicon glyphicon-calendar"></i>
<input type="text" ng-model="date"
date-picker-search placeholder="dd/mm/yyyy"/>
</div>
</td>
</tr>
<tr>
<td>Enactment Date:</td>
<td greyed-dates>
between
<div class="start inner-addon right-addon">
<i class="glyphicon glyphicon-calendar"></i>
<input type="text" ng-model="date"
date-picker-search placeholder="dd/mm/yyyy"/>
</div>
<span>and</span>
<div class="end inner-addon right-addon">
<i class="glyphicon glyphicon-calendar"></i>
<input type="text" ng-model="date"
date-picker-search placeholder="dd/mm/yyyy"/>
</div>
</td>
</tr>
我认为隔离指令中的范围可以解决问题。在某种程度上,当您只是单击日历输入日期时,但当您尝试手动输入日期时,引用该指令的所有输入都会再次更新。
我能够解决此问题的唯一方法是通过为每个元素提供随机父引用(a.data、b.data、c.data、d.data)来更改每个元素的 ng-model。虽然这允许单独对每个日期选择器进行更改,但这显然是一个非常糟糕的解决方案。如果有人知道这里可能存在什么问题,我将非常感谢任何帮助。这与隔离范围有关,对吗?