AngularJS Material - проверен нг на md-радио-кнопке со значением нг в качестве объекта - PullRequest
0 голосов
/ 27 ноября 2018

Я посмотрел вокруг, чтобы увидеть, ответил ли кто-нибудь на это, и, похоже, они не ответили.Я хочу использовать объект, а не строку или целое число в качестве значения переключателя.Это возможно?Не похоже, потому что у меня проблемы с тегами 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 также заполняется из того же вызова.Это одинаковые, но два разных объекта.

В двух словах, я все же хочу отметить правильный, хотя объекты не совсем одинаковые, к ним следует относиться так, как они есть, потому что ониодинаковы.

1 Ответ

0 голосов
/ 27 ноября 2018

При сравнении объектов ng-checked проверяет, является ли флажок тем же объектом или ссылкой, и не проверяет контекст объекта.Таким образом, чтобы установить выбранный / отмеченный переключатель, установите значение, относящееся к объекту.Вот пример обновлений 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]
});
...