У меня есть таблица, заполняемая ng-repeat, у меня есть фильтр, связанный с входом для фильтрации результатов таблицы, и у меня есть другая функция, которая будет вызывать новую строку в таблицу при нажатии кнопки , Моя проблема прямо сейчас заключается в том, что добавление новой строки не работает после того, как фильтр используется без перезагрузки страницы.Как я могу нажать строку в таблицу после ее фильтрации?
Я подозреваю, что мне нужно использовать $ watch, чтобы каким-то образом контролировать массив элементов таблицы, но я просто не могу это понять.
Обратите внимание, что я также использую каркас с угловым материалом и модуль this для таблиц.
Это мой стол HTML:
<md-card layout-padding style="width:90%;margin-top:50px;margin-left:auto;margin-right:auto;" class="md-whiteframe-5dp">
<div layout="row">
<div flex="5"></div>
<md-input-container flex="30">
<label>Filter</label>
<input ng-model="filter">
</md-input-container>
</div>
<md-table-container style="margin-top:-40px;">
<table md-table>
<thead md-head md-order="query.name">
<tr md-row>
<th md-column></th>
<th md-column md-order-by="name">Name</th>
<th md-column md-order-by="position">Position</th>
<th md-column md-order-by="startDate">Start Date</th>
<th md-column class="noselect">Shift</th>
<th md-column class="noselect">Phone</th>
<th md-column class="noselect">Email</th>
<th md-column class="noselect">CRM</th>
<th md-column class="noselect">Xencall</th>
<th md-column></th>
</tr>
</thead>
<tbody md-body>
<tr md-row ng-repeat="tableItem in tableItems | orderBy: query.name | filter:filter">
<td md-cell>
<md-button class="md-raised md-primary" href="#employee">Files</md-button>
</td>
<td md-cell nowrap="nowrap" ng-click="editName($event, tableItem)">{{tableItem.name || "Name"}}</td>
<td md-cell nowrap="nowrap" ng-click="editPosition($event, tableItem)">{{tableItem.position || "Position"}}</td>
<td md-cell nowrap="nowrap" ng-click="editStartDate($event, tableItem)">{{tableItem.startDate || "Start Date"}}</td>
<td md-cell nowrap="nowrap" ng-click="editShift($event, tableItem)">{{tableItem.shift || "Shift"}}</td>
<td md-cell nowrap="nowrap" ng-click="editPhone($event, tableItem)">{{tableItem.phone || "Phone Number"}}</td>
<td md-cell nowrap="nowrap" ng-click="editEmail($event, tableItem)">{{tableItem.email || "Email Address"}}</td>
<td md-cell nowrap="nowrap" ng-click="editCrm($event, tableItem)">{{tableItem.crm || "CRM"}}</td>
<td md-cell nowrap="nowrap" ng-click="editXencall($event, tableItem)">{{tableItem.xencall || "Xencall"}}</td>
<td md-cell>
<md-button class="md-raised md-accent" ng-click="removeRow($index)">Terminate</md-button>
</td>
</tr>
</tbody>
</table>
</md-table-container>
И это контроллер:
employeeMgmt.controller('tableCtrl', function ($scope, $mdEditDialog) {
$scope.tableItems = [
{
name: "David Wong"
, position: "Survey Rep"
, startDate: "2016-04-20"
, shift: "11:00 am - 9:00 pm"
, phone: "(123) 456-7890"
, email: "[email protected]"
, crm: "dwong"
, xencall: "dwong"
}
, {
name: "David Wang"
, position: "Closer"
, startDate: "2016-04-18"
, shift: "11:00 am - 9:00 pm"
, phone: "(123) 456-7890"
, email: "[email protected]"
, crm: "dwong"
, xencall: "dwong"
}
, {
name: "David Weng"
, position: "Jr Broker"
, startDate: "2016-04-22"
, shift: "11:00 am - 9:00 pm"
, phone: "(123) 456-7890"
, email: "[email protected]"
, crm: "dwong"
, xencall: "dwong"
}
, {
name: "David Wung"
, position: "Survey Rep"
, startDate: "2016-04-19"
, shift: "11:00 am - 9:00 pm"
, phone: "(123) 456-7890"
, email: "[email protected]"
, crm: "dwong"
, xencall: "dwong"
}
, {
name: "David Wyng"
, position: "Closer"
, startDate: "2016-04-21"
, shift: "11:00 am - 9:00 pm"
, phone: "(123) 456-7890"
, email: "[email protected]"
, crm: "dwong"
, xencall: "dwong"
}
, {
name: "David Wing"
, position: "Survey Rep"
, startDate: "2016-04-20"
, shift: "11:00 am - 9:00 pm"
, phone: "(123) 456-7890"
, email: "[email protected]"
, crm: "dwong"
, xencall: "dwong"
}
];
$scope.query = {
order: 'name'
};
$scope.addRow = function() {
var tableItem = {
name: $scope.name
, position: $scope.position
, startDate: $scope.startDate
, shift: $scope.shift
, phone: $scope.phone
, email: $scope.email
, crm: $scope.crm
, xencall: $scope.xencall
};
$scope.tableItems.push(tableItem);
};
$scope.removeRow = function (index) {
$scope.tableItems.splice(index, 1);
};
});
Привет, Мэтт, добро пожаловать в StackOverflow. Это много кода, чтобы ожидать людей, которые могут помочь вам прочитать. Вероятнее всего, вы получите лучший ответ, если вы уменьшите свой код до нужных предметов, необходимых для вопроса. – Erresen
@Erresen Я удалил код для диалоговых окон редактирования. Остается только самый релевантный код. –
Я сделал Plunker из примера углового фильтра, и он отображается просто отлично при добавлении строк. Он даже отображается, пока фильтр применяется, если он соответствует фильтру. https://plnkr.co/edit/XB6hYWc7fvrYk65sx7RY?p=preview –