angular jquery-ui范围内的可选问题

时间:2017-01-16 05:10:44

标签: jquery angularjs jquery-ui jquery-ui-selectable

我使用jquery-ui selectable with angular来选择表格中的单元格并将这些选定的数据传递给anular控制器。使用角度ng-repeat重复行和列。行重复日期和列重复房间。当选择使用拖动网格时,它会获取指令中的数据(选定的房间和选定的日期)。当我在指令中控制日志时,我可以看到所选房间和选定日期。但是如何在我的控制器中访问这些数据。我的代码如下。

<table cellpadding="10" id="table1">

            <tbody>
                <div >
                    <tr  ng-repeat="room in rooms" ui-selectable doc-array="rooms"  class="roomContainer" >

                            <td ng-repeat="day in room.days" class="parent"  ng-mouseup="reserve3()" >
                                                       {{day.no}}        
                            </td>

                    </tr>
                </div>
            </tbody>
        </table>

指令

angular.module('myApp')
  .directive('uiSelectable', function(){

  return {
      scope:false, 
      link: function(scope, element, attrs){
scope.$on('clearselection', function (event, document) {
          element.find('.ui-selected').removeClass('ui-selected')
        });




            element.selectable({
                stop: function (evt, ui) {
                    console.log(evt);
                    scope.selectedDays =[];
                    var collection = scope.$eval(attrs.docArray)
                    var selected = element.find('td.parent.ui-selected').map(function () {
                        var idx1 = $(this).index();
                        console.log(idx1);
                        element.find('td.parent.ui-selected').parent().map(function () {
                            var idx2 = $(this).index();
                              console.log(idx2);
                              //console.log(scope.DataList)
                              scope.selectedDays.push(scope.rooms[idx2].days[idx1]);
                              scope.selectedRoom  = scope.rooms[idx2];
                              scope.kkk = 'testing 123 ..............';
                              scope.$apply();

                              console.log(scope.selectedRoom);
                              console.log(scope.selectedDays);

                          }).get();

                    }).get();

                }
            });  




}
}


});

控制器

var app = angular.module('myApp', ['ngAnimate', 'ui.bootstrap']);
app.controller('myCtrl', function($scope, $timeout) {
    $scope.firstName = "John";
    $scope.lastName = "Doe";


    var days1 = [{no: 1, clicked: false,count:0}, {no:2, clicked: false,count:0}, {no:3, clicked: false,count:0}, {no:4,clicked: false}, {no:5}, {no:6}, {no:7}, {no:8},{no: 9}, {no:10}, {no:11}, {no:12}, {no:13}, {no:14}, {no:15}, {no:16} ,{no: 17}, {no:18}, {no:19}, {no:20}, {no:21}, {no:22}, {no:23}, {no:24},{no: 25}, {no:26}, {no:27}, {no:28}, {no:29}, {no:30}, {no:31}];
    var days2 = [{no: 1, clicked: false, count: 0}, {no:2, clicked: false,count: 0}, {no:3,clicked: false,count:0}, {no:4, clicked: false}, {no:5}, {no:6}, {no:7}, {no:8},{no: 9}, {no:10}, {no:11}, {no:12}, {no:13}, {no:14}, {no:15}, {no:16} ,{no: 17}, {no:18}, {no:19}, {no:20}, {no:21}, {no:22}, {no:23}, {no:24},{no: 25}, {no:26}, {no:27}, {no:28}, {no:29}, {no:30}, {no:31}];
    var days3 = [{no: 1, clicked: false,count:0}, {no:2, clicked: false,count:0}, {no:3, clicked: false, count:0}, {no:4, clicked: false, count:0}, {no:5}, {no:6}, {no:7}, {no:8},{no: 9}, {no:10}, {no:11}, {no:12}, {no:13}, {no:14}, {no:15}, {no:16} ,{no: 17}, {no:18}, {no:19}, {no:20}, {no:21}, {no:22}, {no:23}, {no:24},{no: 25}, {no:26}, {no:27}, {no:28}, {no:29}, {no:30}, {no:31}];
    var days4 = [{no: 1, clicked: false, count:0}, {no:2, clicked: false,count:0}, {no:3, clicked: false, count:0}, {no:4, clicked: false, count:0}, {no:5}, {no:6}, {no:7}, {no:8},{no: 9}, {no:10}, {no:11}, {no:12}, {no:13}, {no:14}, {no:15}, {no:16} ,{no: 17}, {no:18}, {no:19}, {no:20}, {no:21}, {no:22}, {no:23}, {no:24},{no: 25}, {no:26}, {no:27}, {no:28}, {no:29}, {no:30}, {no:31}];



     $scope.rooms = [
        { name: '101', age: 23 , days:days1 },
        { name: '102', age: 23 , days:days2 },
        { name: '103', age: 23 , days:days3},
        { name: '104', age: 23 , days:days4}
    ];

    $scope.years = ['2001','2002','2003','2004','2005','2006','2007','2008','2009','2010','2011','2012','2013','2014','2015','2016'];
    $scope.months = ['1','2','3','4','5','6','7','8','9','10','11','12'];


    $scope.selectedDays = [];
    $scope.selectedRoom = {};
    $scope.kkk = '';

    $scope.selectedYear ='2016';
    $scope.selectedMonth = '1';

    var clicked = true;
    var count =0 ;


    $scope.getMonthDays = function(){

        var y= $scope.selectedYear;
        var m= $scope.selectedMonth;
        var days = new Date(y, m, 0).getDate();
        var days1 = [];

        for(var i=0; i< days; i++){
              var day= {
                no: i+1
              };
              days1.push(day);
        }

        console.log(days1);

        for(var j=0; j<$scope.rooms.length; j++){
         $scope.rooms[j].days = days1;
        }

    };


    $scope.reserve3 = function(){

        console.log($scope.selectedRoom);   


        $timeout(function() {
                $scope.open('lg');
                console.log($scope.selectedRoom);
                console.log($scope.kkk);
            }, 1000);


        console.log('opening');



    };



});

1 个答案:

答案 0 :(得分:0)

使用将ui-selectable doc-array="rooms"移动到表格标记来解决。

<table cellpadding="10" id="table1" ui-selectable doc-array="rooms">

            <tbody>

                    <tr  ng-repeat="room in rooms"   class="roomContainer" >

                            <td ng-repeat="day in room.days" class="parent"  ng-mouseup="reserve3()" >
                                                       {{day.no}}        
                            </td>

                    </tr>

            </tbody>
        </table>