2016-06-16 3 views
2

Приносим извинения, если у этого есть неудобный вопрос. Мне нужна помощь, чтобы понять, как выполнить надлежащую привязку данных в определенном случае. У меня есть объект, который я вызываю TimesheetData. Этот объект хранит строку, которая равна неделе 6/13/2016, а также имеет массив weekData, в котором хранятся объекты с идентификатором, а затем часы, отработанные в каждый день недели.привязка данных AngularJS при использовании ng-repeat

Я использую ng-repeat, чтобы заполнить выпадающий список с помощью дополнительной недели данных, но я потерял информацию о том, как выбрать таблицу ниже этой недели с выбранным значением, которое является датой.

В приведенном ниже коде необходимо как-то обновить данные в тегах <td>, чтобы соответствовать данным, хранящимся в объекте, который имеет значение weekOf, равное выбранному. Я считаю, что решение будет заключаться в привязке данных в таблице от массива с использованием индекса выбранного элемента в теге select.

Может ли кто-нибудь показать мне, как получить этот индекс.

dash.TimesheetData.WeekData[x].xyz где x - значение из тега select и его выбранного индекса.

Некоторый код ниже для справки:

<h2>Week of {{dash.TimesheetData.WeekOf}}</h2> 
      <p> 
       Week 
       <select style="color:black;" data-ng-model="dash.TimesheetData.WeekOf"> 
        <option data-ng-repeat="options in dash.TimesheetData.WeekData" value="{{options.WeekOf}}">{{options.WeekOf}}</option> 
       </select> 
      </p> 
      <div class="table-responsive"> 
       <div class="table-hover table-striped"> 
        <style> 
         .table td { 
          text-align: center; 
         } 

         .table th { 
          text-align: center; 
         } 
        </style> 
        <table class="table"> 
         <thead> 
          <tr> 
           <th>ID</th> 
           <th>Monday</th> 
           <th>Tuesday</th> 
           <th>Wednesday</th> 
           <th>Thursday</th> 
           <th>Friday</th> 
           <th>Saturday</th> 
           <th>Sunday</th> 
          </tr> 
         </thead> 
         <tbody> 
          <tr> 
           <td>{{dash.TimesheetData.WeekData[0].ID}}</td> 
           <td>{{dash.TimesheetData.WeekData[0].Monday}}</td> 
           <td>{{dash.TimesheetData.WeekData[0].Tuesday}}</td> 
           <td>{{dash.TimesheetData.WeekData[0].Wednesday}}</td> 
           <td>{{dash.TimesheetData.WeekData[0].Thursday}}</td> 
           <td>{{dash.TimesheetData.WeekData[0].Friday}}</td> 
           <td>{{dash.TimesheetData.WeekData[0].Saturday}}</td> 
           <td>{{dash.TimesheetData.WeekData[0].Sunday}}</td> 
          </tr> 
         </tbody> 
        </table> 
       </div> 
      </div> 

объекта расписания для справки:

function WeekObject(ID, Mon, Tue, Wed, Thur, Fri,Sat,Sun, WeekOf) { 
    this.ID = ID; 
    this.Monday = Mon; 
    this.Tuesday = Tue; 
    this.Wednesday = Wed; 
    this.Thursday = Thur; 
    this.Friday = Fri; 
    this.Saturday = Sat; 
    this.Sunday = Sun; 
    this.WeekOf = WeekOf; 
}; 

this.TimesheetData = { 
    WeekOf: '', 
    WeekData: [ 
     new WeekObject(1,7,4,4,4,1,0,0, '6/13/2016'), 
     new WeekObject(2,5,6,2,8,1,2,0,'6/20/2016') 
    ], 
}; 
+0

Вы пытаетесь перебирать свойства 'WeekObject'? – 8protons

+0

Я пытаюсь отобразить данные о определенной неделе в таблице. Я хочу, чтобы данные таблицы были привязаны к неделе, выбранной в раскрывающемся списке. –

ответ

2

Я также рекомендую просмотреть директиву ng-options, чтобы поместить выбранный элемент HTML. Как видно из ссылки, вы можете ограничить свою неделю областью видимости модели ng.

https://docs.angularjs.org/api/ng/directive/select

+0

Хорошо, мне нравится этот подход, однако теперь у меня проблема. Я пытаюсь связать переменную options от ng-repeat к новой переменной, которую я назвал данными. Однако я могу привязать только один атрибут опций, а не всю переменную опций к другой переменной. –

+0

Хорошо, вот моя привязка: Когда я do week of {{data}} Я вижу объект, когда я делаю {{data.ID}}, я ничего не получаю. –

+0

Попробуйте это <выберите имя = «mySelect» ID = «mySelect» нг-опции = «вариант для опции в dash.TimesheetData.WeekData» нг-модель = «данные»> Но вы должны задать data значение по умолчанию из TimesheetData.WeekData. Скажем, $ scope.data = TimesheetData.WeekData [0] – enricop89

1

Во-первых, ваш вопрос не так ясно; очистите часть грамматики. Во-вторых, вы можете написать функцию для изменения содержимого в таблице в соответствии с раскрывающимся списком.

Я использовал директиву ng-change в раскрывающемся меню. Пожалуйста, найдите рабочий плункер и, пожалуйста, ответьте на ваши выводы.

<select style="color:black;" data-ng-model="TimesheetData.WeekOf" ng-change="changeTable()"> 
     <option ng-repeat="day in array" value="{{day}}">{{day}}</option> 

var app = angular.module('plunker', []); 
 

 
app.controller('MainCtrl', function($scope) { 
 
    $scope.array = ["mon", "tue", "wen", "thu"]; 
 

 
    function WeekObject(ID, Mon, Tue, Wed, Thur, Fri, Sat, Sun, WeekOf) { 
 
    this.ID = ID; 
 
    this.Monday = Mon; 
 
    this.Tuesday = Tue; 
 
    this.Wednesday = Wed; 
 
    this.Thursday = Thur; 
 
    this.Friday = Fri; 
 
    this.Saturday = Sat; 
 
    this.Sunday = Sun; 
 
    this.WeekOf = WeekOf; 
 
    } 
 

 
    $scope.TimesheetData = { 
 
    WeekData: [ 
 
     new WeekObject(1, 7, 4, 4, 4, 1, 0, 0, '6/13/2016'), 
 
     new WeekObject(2, 5, 6, 2, 8, 1, 2, 0, '6/20/2016'), 
 
     new WeekObject(3, 5, 6, 2, 8, 1, 2, 0, '6/20/2016'), 
 
     new WeekObject(4, 5, 6, 2, 8, 1, 2, 0, '6/20/2016') 
 
    ], 
 
    }; 
 

 
    $scope.changeTable = function(index) { 
 
    for (var i = 0; i < $scope.array.length; i++) { 
 
     var test = $scope.array[i]; 
 
     if (test === $scope.TimesheetData.WeekOf) { 
 
     $scope.row = $scope.TimesheetData.WeekData[i]; 
 
     } 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script> 
 
<!DOCTYPE html> 
 
<html ng-app="plunker"> 
 

 
    <head> 
 
    <meta charset="utf-8" /> 
 
    <title>AngularJS Plunker</title> 
 
    <script>document.write('<base href="' + document.location + '" />');</script> 
 
    <link rel="stylesheet" href="style.css" /> 
 
    <script data-require="[email protected]" src="https://code.angularjs.org/1.3.20/angular.js" data-semver="1.3.20"></script> 
 
    <script src="app.js"></script> 
 
    </head> 
 

 
    <body ng-controller="MainCtrl"> 
 
    <h2>Week of {{TimesheetData.WeekOf}}</h2> 
 
      <p> 
 
       Week 
 
       <select style="color:black;" data-ng-model="TimesheetData.WeekOf" ng-change="changeTable()"> 
 
        <option ng-repeat="day in array" value="{{day}}">{{day}}</option> 
 
       </select> 
 
      </p> 
 
      <div class="table-responsive"> 
 
       <div class="table-hover table-striped"> 
 
        <style> 
 
         .table td { 
 
          text-align: center; 
 
         } 
 

 
         .table th { 
 
          text-align: center; 
 
         } 
 
        </style> 
 
        <table class="table"> 
 
         <thead> 
 
          <tr> 
 
           <th>ID</th> 
 
           <th>Monday</th> 
 
           <th>Tuesday</th> 
 
           <th>Wednesday</th> 
 
           <th>Thursday</th> 
 
           <th>Friday</th> 
 
           <th>Saturday</th> 
 
           <th>Sunday</th> 
 
           <th>WeekOf</th> 
 
          </tr> 
 
         </thead> 
 
         <tbody> 
 
          <tr> 
 
           <th>{{row.ID}}</th> 
 
           <th>{{row.Monday}}</th> 
 
           <th>{{row.Tuesday}}</th> 
 
           <th>{{row.Wednesday}}</th> 
 
           <th>{{row.Thursday}}</th> 
 
           <th>{{row.Friday}}</th> 
 
           <th>{{row.Saturday}}</th> 
 
           <th>{{row.Sunday}}</th> 
 
           <th>{{row.WeekOf}}</th> 
 
          </tr> 
 
         </tbody> 
 
        </table> 
 
       </div> 
 
      </div> 
 
      <!--{{TimesheetData.WeekData[0].ID}}--> 
 
    </body> 
 

 
</html>

</select> 

$scope.changeTable = function(index){ 
for (var i=0; i<$scope.array.length;i++) 
{ 
    var test = $scope.array[i]; 
    if(test === $scope.TimesheetData.WeekOf) 
    { 
    $scope.row= $scope.TimesheetData.WeekData[i]; 
    } 
}} 

Пожалуйста, обратите внимание, код, указанный выше.

+0

Хороший ответ; быстро написано, тоже. – 8protons

+1

Благодарим за комплимент :) –

+0

Я работаю над добавлением этого кода в свой код, чтобы убедиться, что он работает внутри моего кода. Спасибо, что ответили, это то, что я хочу, это займет всего около 5 минут, чтобы реализовать код. –