Javascript AngularJS ng repeat-jquery日期选择器在ng repeat内不工作
jQuery日期选择器在AngularJS ng重复块内不工作 不确定ng repeat块内的代码生成是否有任何错误。同样的逻辑在ng repeat之外也适用 工作代码Javascript AngularJS ng repeat-jquery日期选择器在ng repeat内不工作,javascript,jquery,angularjs,datepicker,ng-repeat,Javascript,Jquery,Angularjs,Datepicker,Ng Repeat,jQuery日期选择器在AngularJS ng重复块内不工作 不确定ng repeat块内的代码生成是否有任何错误。同样的逻辑在ng repeat之外也适用 工作代码 <div class="form-group"> <label class="control-label col-md-4">TEST DATE</label> <div class="input-group col-md-
<div class="form-group">
<label class="control-label col-md-4">TEST DATE</label>
<div class="input-group col-md-2">
<input type="text" id="testDate" name="testDate" readonly="readonly" class="form-control">
</div>
</div>
<div ng-repeat="reportType in reportTypes">
<div class="form-group">
<label class="control-label col-md-4">{{reportType.reportTypeLabel}}</label>
<div class="input-group col-md-2">
<input type="text" id="{{reportType.reportTypeCodeId}}Date" readonly="readonly"
class="form-control">
</div>
</div>
</div>
在ng repeat结束后,使用此指令初始化日期选择器:
angular.module('mymodule').directive('ngOnFinishRender', function ($timeout) {
return {
restrict: 'A',
link: function (scope, element, attr) {
if (scope.$last === true) {
$timeout(function () {
scope.$emit(attr.broadcastEventName ? attr.broadcastEventName : 'ngRepeatFinished');
});
}
}
};
});
在控制器中:
$scope.$on('ngRepeatFinished', function(){
$("input[id*='date']").datepicker({
dateFormat : "dd/mm/yy"
});
});
在您的视图中,使用ng repeat
将指令ng on finish render
添加到元素中:
<div ng-repeat="reportType in reportTypes" ng-on-finish-render>
<div class="form-group">
<label class="control-label col-md-4">{{reportType.reportTypeLabel}}</label>
<div class="input-group col-md-2">
<input type="text" id="{{reportType.reportTypeCodeId}}Date" readonly="readonly"
class="form-control">
</div>
</div>
</div>
您必须为日期选择器创建自定义指令 景色
<div ng-app="myApp" ng-controller="myController">
<div ng-repeat="report in repArray">
<div class="form-group">
<label>{{report.values.name}}</label>
<input type="text" datepicker ng-model="datevalue" />
</div>
</div>
这是混合angular和jquery的错误方法。当jquery代码只运行一次时,ng repeat可以添加或删除元素。将所有jquery包装为指令,或者干脆不使用它-改用角度日期选择器。创建一个日期选择器指令。对
元素使用jQueryLite和datepicker,确保清理$scope destroy以避免内存泄漏。
$scope.$on('myNgRepeatFinished', function(){
$("input[id*='date']").datepicker({
dateFormat : "dd/mm/yy"
});
});
<div ng-app="myApp" ng-controller="myController">
<div ng-repeat="report in repArray">
<div class="form-group">
<label>{{report.values.name}}</label>
<input type="text" datepicker ng-model="datevalue" />
</div>
</div>
var myApp = angular.module('myApp', []);
myApp.controller('myController', ['$scope', function ($scope) {
$scope.report = [
{ 'name': 'rep1' },
{ 'name': 'rep2' },
{ 'name': 'rep3' }
]
$scope.repArray = Object.keys($scope.report)
.map(function (value, index) {
return { values: $scope.report[value] }
}
);
} ]);
myApp.directive("datepicker", function () {
function link(scope, element, attrs, controller) {
element.datepicker({
dateFormat: "dd/mm/yy"
});
}
return {
require: 'ngModel',
link: link
};
});