Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS ng repeat-jquery日期选择器在ng repeat内不工作_Javascript_Jquery_Angularjs_Datepicker_Ng Repeat - Fatal编程技术网

Javascript AngularJS ng repeat-jquery日期选择器在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-

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-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
    };
});