Ich habe das folgende Skript mit dateTimePicker
als AngularJS Richtlinie:Wie umgehen AngularJS Richtlinie mit Typoskript
(function() {
'use strict';
var module = angular.module('feedApp');
module.directive('datetimepicker', [
'$timeout',
function ($timeout) {
return {
require: '?ngModel',
restrict: 'EA',
scope: {
options: '@',
onChange: '&',
onClick: '&'
},
link: function ($scope, $element, $attrs, controller) {
$($element).on('dp.change', function() {
$timeout(function() {
var dtp = $($element).data('DateTimePicker');
controller.$setViewValue(dtp.date().format('MM/DD/YYYY HH:mm'));
$scope.onChange();
});
});
$($element).on('click', function() {
$scope.onClick();
});
controller.$render = function() {
if (!!controller) {
if (controller.$viewValue === undefined) {
controller.$viewValue = null;
}
else if (!(controller.$viewValue instanceof moment)) {
controller.$viewValue = moment(controller.$viewValue);
}
$($element).data('DateTimePicker').date(controller.$viewValue);
}
};
$($element).datetimepicker($scope.$eval($attrs.options));
}
};
}
]);
})();
Und ich möchte es neu zu schreiben Typoskript verwenden. Dies ist der Code, den ich jetzt habe:
namespace feedApp {
'use strict';
DateTimePicker.$inject = ['$timeout'];
function DateTimePicker($timeout: ng.ITimeoutService): ng.IDirective {
var directive = <ng.IDirective>{
require: '?ngModel',
restrict: 'EA',
scope: {
options: '@',
onChange: '&',
onClick: '&'
},
link: link
};
function link(scope: ng.IScope, element: JQuery, attrs: ng.IAttributes, controller: ng.INgModelController): void {
$(element).on('dp.change', function() {
$timeout(function() {
var dtp = $(element).data('DateTimePicker');
controller.$setViewValue(dtp.date().format('MM/DD/YYYY HH:mm'));
scope.onChange();
});
});
$(element).on('click', function() {
scope.onClick();
});
controller.$render = function() {
if (!!controller) {
if (controller.$viewValue === undefined) {
controller.$viewValue = null;
}
else if (!(controller.$viewValue instanceof moment)) {
controller.$viewValue = moment(controller.$viewValue);
}
$(element).data('DateTimePicker').date(controller.$viewValue);
}
};
$(element).datetimepicker(scope.$eval(attrs.options));
}
return directive;
}
angular.module("feedApp")
.directive("datetimepicker", DateTimePicker);
}
Ich bin nicht mit Typoskript erlebt und ich weiß nicht wirklich, was die beste Praxis ist jQuery Elemente wie $(element).on
mit TS zu ändern. Wie man mit
scope: {
options: '@',
onChange: '&',
onClick: '&'
},
innerhalb TypeScript link
Funktion? Vielen Dank im Voraus für jede Hilfe.
Was für Dinge hinter mit jQuery die Begründung ist wie 'Klick' in der Richtlinie? Auch habe ich nie Dinge wie $ ($ element) gesehen, also was ist der Gedanke dahinter? Ich bin nur Neugierig. Nichts für ungut) –
Das '$ ($ element)' ist völlig redundant: eckige Elemente sind bereits in jqLite (oder jquery, wenn Sie es geladen haben) verpackt, so dass alles mit '$ ($ element)' könnte einfacher geschrieben werden als ' $ Element'. – Duncan
Das erste in JS geschriebene Beispiel stammt aus dem Internet und funktioniert. '$ ($ element)' (wenn ich es gut genug verstehe) zeigt nur das HTML-Element, so dass Sie Ereignisse wie '.on' usw. verwenden können. – Marox