The*_*uth 8 angularjs angularjs-directive
我试图按照日期格式的stackoverflow讨论中的示例,它非常适用于页面只有一个日期字段.但是,如果页面上有多个日期字段,则似乎只会设置第一个日期字段/ ng-model,甚至会选择其他日期字段.
以下是HTML模板代码:
<div class="input-append" my-Datepickerloaded>
<input type="text" ng-model="user.StartDate" my-Datepickerformater></input>
<span class="add-on">
<i data-time-icon="icon-time" data-date-icon="icon-calendar">
</i>
</span>
</div>
<div class="input-append" my-Datepickerloaded>
<input type="text" ng-model="user.EndDate" my-Datepickerformater></input>
<span class="add-on">
<i data-time-icon="icon-time" data-date-icon="icon-calendar">
</i>
</span>
</div>
Run Code Online (Sandbox Code Playgroud)
这是指令代码(myDatePickerformater):
return {
require: '^ngModel',
restrict: 'A',
link: function (scope, elm, attrs, ctrl) {
var moment = $window.moment,
dateFormat = 'MM/DD/YYYY';
attrs.$observe('myDatepickerformater', function (newValue) {
ctrl.$modelValue = new Date(ctrl.$setViewValue);
});
ctrl.$formatters.unshift(function (modelValue) {
scope = scope;
if (!dateFormat || !modelValue) return '';
var retVal = moment(modelValue).format(dateFormat);
return retVal;
});
ctrl.$parsers.unshift(function (viewValue) {
scope = scope;
var date = moment(viewValue, dateFormat);
return (date && date.isValid() && date.year() > 1950) ? date.toDate() : "";
});
}
};
Run Code Online (Sandbox Code Playgroud)
我试图对他们绑定的模型进行$ scope.$ watch,看起来即使我正在更改user.EndDate输入字段,它总是user.StartDate获取更改并且user.EndDate保持不变,甚至如果"输入"字段正确显示两个字段.
如何确保两个字段都能正确更新其绑定模型?
谢谢你的帮忙.
你需要给你的指令isolated scope.
现在,该指令的多个实例共享相同的范围,因此更新模型不能按预期工作.
看看docs.angularjs.org/guide/directive
require: '^ngModel',
restrict: 'A',
scope: {
...
},
link: function (scope, elm, attrs, ctrl) {
....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13541 次 |
| 最近记录: |