簡體   English   中英

AngularJS ng-repeat-jQuery Datepicker在ng-repeat內部不起作用

[英]AngularJS ng-repeat - jquery Datepicker not working inside ng-repeat

jQuery datepicker在AngularJS ng-repeat塊中不起作用。

不確定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>

使用Javascript

// Date picker dd/mm/yyyy
$(function() {
    $("input[id*='date']").datepicker({
        dateFormat : "dd/mm/yy"
    });
});
$(function() {
    $("input[id*='Date']").datepicker({
        dateFormat : "dd/mm/yy"
    });
});

使用此偽指令在ng-repeat結束后初始化datepicker:

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-on-finish-render指令添加到ng-repeat元素中:

<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>

如果您的作用broadcast-event-name="myNgRepeatFinished"有多個ng-repeat並且它們具有不同的用途,則可以添加broadcast-event-name="myNgRepeatFinished"參數

$scope.$on('myNgRepeatFinished', function(){        
    $("input[id*='date']").datepicker({
        dateFormat : "dd/mm/yy"
    });        
}); 

您必須為datepicker創建一個自定義指令。

風景

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM