मैं सरल यूई-डेटटाइम निर्देश बना रहा हूं। यह जावास्क्रिप्ट दिनांक वस्तु को _date, _hours और _minutes भागों में विभाजित करता है। _date jquery ui डेटपिकर, _hours और _minutes - संख्या इनपुट का उपयोग करता है।क्या मैं अलग-अलग क्षेत्र के साथ एनजी-मॉडल का उपयोग कर सकता हूं?
angular.module("ExperimentsModule", [])
.directive("uiDatetime", function() {
return {
restrict: 'EA',
replace: true,
template: '<div class="ui-datetime">' +
'<input type="text" ng-model="_date" class="date">' +
'<input type="number" ng-model="_hours" min="0" max="23" class="hours">' +
'<input type="number" ng-model="_minutes" min="0" max="59" class="minutes">' +
'<br />Child datetime1: {{datetime1}}' +
'</div>',
require: 'ngModel',
scope: true,
link: function (scope, element, attrs, ngModelCtrl) {
var elDate = element.find('input.date');
ngModelCtrl.$render = function() {
var date = new Date(ngModelCtrl.$viewValue);
var fillNull = function (num) {
if (num < 10) return '0' + num;
return num;
};
scope._date = fillNull(date.getDate()) + '.' + fillNull(date.getMonth() + 1) + '.' + date.getFullYear();
scope._hours = date.getHours();
scope._minutes = date.getMinutes();
};
elDate.datepicker({
dateFormat: 'dd.mm.yy',
onSelect: function (value, picker) {
scope._date = value;
scope.$apply();
}
});
var watchExpr = function() {
var res = scope.$eval('_date').split('.');
if (res.length == 3) return new Date(res[2], res[1] - 1, res[0], scope.$eval('_hours'), scope.$eval('_minutes'));
return 0;
};
scope.$watch(watchExpr, function (newValue) {
ngModelCtrl.$setViewValue(newValue);
}, true);
}
};
});
function TestController($scope) {
$scope.datetime1 = new Date();
}
GitHub पर: https://github.com/andreev-artem/angular_experiments/tree/master/ui-datetime
जहां तक मैं समझता हूँ - सबसे अच्छा अभ्यास है जब आप बनाने के लिए एक नया घटक अलग गुंजाइश उपयोग करने के लिए है।
जब मैंने अलग-अलग दायरे का उपयोग करने की कोशिश की - कुछ भी काम नहीं करता है। ngModel। $ viewValue === अपरिभाषित।
जब मैंने नए दायरे का उपयोग करने की कोशिश की (मेरा उदाहरण, इतना अच्छा संस्करण नहीं है) - ngModel नए बनाए गए दायरे पर मूल्य का उपयोग करता है।
बेशक मैं अलग-अलग दायरे के साथ निर्देश बना सकता हूं और "= अभिव्यक्ति" (example) के माध्यम से ngModel मान के साथ काम कर सकता हूं। लेकिन मुझे लगता है कि ngModelController के साथ काम करना एक बेहतर अभ्यास है।
मेरे सवालों का:
- मैं अलग गुंजाइश के साथ ngModelController का उपयोग कर सकते हैं?
- यदि यह संभव नहीं है कि इस तरह के घटक बनाने के लिए कौन सा समाधान बेहतर है?
समाधान के रूप में लगता है
यहाँ मेरी निर्देश, गैर जरूरी कोड के साथ छीन लिया है। लेकिन कामकाज के लिए मैं 'स्कोप: सत्य' और 'एनजी-मॉडल = "कुछ ओबीजे.ओमप्रॉप" ' –