AngularJS Material - проверен нг на md-радио-кнопке со значением нг в качестве объекта
Я посмотрел вокруг, чтобы увидеть, ответил ли кто-нибудь на это, и кажется, что они не ответили. Я хочу использовать объект, а не строку или целое число в качестве значения переключателя. Это возможно? Не похоже, потому что у меня проблемы с тегами md-radio-button
распознает объект, а не строковое или целочисленное значение как выбранное. Я вижу, что это работает после загрузки страницы, и я выбираю что-то, но я не знаю, как проверить переключатель, если значение уже существует. Вы можете увидеть очень простую демонстрацию здесь: https://codepen.io/anon/pen/ZmjrLN
я пробовал class="md-checked"
чтобы увидеть, если это работает, это не так. я пробовал ng-checked="selectedStatus.Name == status.Name"
, это тоже не работает. по факту ng-checked="true"
тоже не работает.
я бы подумал md-radio-button
мог работать с объектом!
--- РЕДАКТИРОВАТЬ ДЛЯ УТОЧНЕНИЯ ---
Из приведенного ниже ответа, ссылаясь на код из codepen, если я использую тот же объект в $scope.statuses
заселять $scope.selectedStatus
, он действительно выбирает правильный переключатель на нагрузку. ОДНАКО, в реальном мире $scope.selectedStatus
заполняется фактическим статусом с сервера и $scope.statuses
также заполняется от того же вызова. Это одинаковые, но 2 разных объекта.
В двух словах, я все еще хочу отметить правильный, хотя объекты не совсем одинаковые, они должны рассматриваться как они, потому что они одинаковы.
1 ответ
При сравнении объектов ng-check проверяет, является ли флажок тем же объектом или ссылкой, и не проверяет контекст объекта. Таким образом, чтобы установить выбранный / отмеченный переключатель, установите значение, соответствующее объекту. Вот пример обновлений Javascript для вашего codepen:
angular
.module('BlankApp')
.controller('AppController', function($scope) {
$scope.statuses = [
{id: 1, Name: 'Active'},
{id: 2, Name: 'Dormant'}
];
$scope.selectedStatus = $scope.statuses[0]; // reference the object directly
});
Или, если значение установлено за пределами области действия, и мы должны сравнить, то мы можем сравнить вручную, а затем установить selectedStatus, найдя правильный объект и присвоив его.
angular
.module('BlankApp')
.controller('AppController', function($scope) {
$scope.statuses = [
{id: 1, Name: 'Active'},
{id: 2, Name: 'Dormant'}
];
$scope.selectedStatus = {id: 1, Name: 'Active'};
// Find the index of the selected that matches on id
let i = $scope.statuses.findIndex((val) => {
return val.id = $scope.selectedStatus.id;
});
$scope.selectedStatus = $scope.statuses[i]
});