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]
});
Другие вопросы по тегам