第一件事,专业的拼写是错误的前三输入模型。
现在要回答你的问题,你的方法的问题是,你正在使用4个不同的属性来存储/引用1值,即日期。就我所知,这不是纯粹的角度方式。
您只需要将其存储在1个属性中,即professional.start_date,然后将日期月份和年份从相同的位置分开,除非您确实有某些事情要与日期月份和年份分开进行。我希望我很清楚。请阅读下面。
ngModelController
给我们$formatters
和$parsers
,它格式/解析你的模型/视图,并将它们呈现给视图或将它们存储回相应的模型。你应该使用它们。下面的实施。
的Index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body ng-app="myApp" ng-controller="AppController">
<div class="infoDateBox">
<input dd-directive type="text" placeholder="DD" ng-model="professional.start_date">
<input mm-directive type="text" placeholder="MM" ng-model="professional.start_date">
<input yyyy-directive type="text" placeholder="YYYY" ng-model="professional.start_date">
</div>
<span class="seperator">-</span>
<table>
<tr>
<td>Start date</td>
<td><input type="text" ng-model="professional.start_date"></td>
</tr>
</table>
<script src="angular.js" type="text/javascript "></script>
<script src="app.js" type="text/javascript "></script>
</body>
</html>
app.js
var myApp = angular.module('myApp', []);
myApp.controller('AppController', function($scope) {
$scope.professional = {};
$scope.professional.start_date = new Date();
});
myApp.directive('yyyyDirective', function($filter)
{
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ngModelController)
{
ngModelController.$formatters.push(function(data)
{
return $filter('date')(data, "yyyy");
});
ngModelController.$parsers.push(function(data)
{
var d = new Date(ngModelController.$modelValue);
d.setYear(data);
return d;
});
}
};
});
myApp.directive('mmDirective', function($filter)
{
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ngModelController)
{
ngModelController.$formatters.push(function(data)
{
return data.getMonth()+1;
});
ngModelController.$parsers.push(function(data)
{
console.log(data);
var d = new Date(ngModelController.$modelValue);
if(data.length!=0)
{
d.setMonth(parseInt(data)-1);
}
else
{
d.setMonth(0);
}
return d;
});
}
};
});
myApp.directive('ddDirective', function($filter)
{
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ngModelController)
{
ngModelController.$formatters.push(function(data)
{
return $filter('date')(data, "dd");
});
ngModelController.$parsers.push(function(data)
{
var d = new Date(ngModelController.$modelValue);
d.setDate(data);
return d;
});
}
};
});
该代码可以优化,但我写它理解目的的方式。如果您有任何疑问,请告诉我。文档here
我可以看到你的控制器吗? – Luke101
@ Luke101我已更新它。我需要将月份,日期和年份复制到start_date字段。你有什么建议吗? – akbarbin
如果我的回答是正确的,请将其标为正确) –