AngularJS材质-对以ng-value为对象的md-radio-button进行ng检查

时间:2018-11-27 01:13:06

标签: javascript angularjs radio-button angularjs-material

我环顾四周,看看是否有人回答了这个问题,看来他们没有回答。我想使用一个对象而不是字符串或整数作为单选按钮的值。这可能吗?好像不是,因为标签md-radio-button在识别对象而不是字符串或整数值时遇到麻烦。我可以看到页面加载后它可以工作,我选择了一些东西,但是我不知道如何检查单选按钮(如果该值已经存在)。您可以在此处看到一个非常简单的演示:https://codepen.io/anon/pen/ZmjrLN

我已经尝试class="md-checked"来查看是否可行,但没有成功。我已经尝试过ng-checked="selectedStatus.Name == status.Name",但是它也不起作用。实际上ng-checked="true"也不起作用。

我认为md-radio-button可以用于对象!

---澄清编辑---

从下面的答案中引用代码源中的代码,如果我在$scope.statuses中使用相同的对象来填充$scope.selectedStatus,则它的确选择了加载时正确的单选按钮。但是,在现实世界中,$scope.selectedStatus填充有来自服务器的实际状态,而$scope.statuses也填充有相同的调用。它们是相同的,但是2个不同的对象。

简而言之,我仍然要检查正确的对象,即使对象不完全相同,也应将它们视为相同,因为它们是相同的。

1 个答案:

答案 0 :(得分:0)

在比较对象时,ng-checked会查看被检查的对象是同一对象还是引用,而不检查对象的内容。因此,要设置选中/选中的单选按钮,请使该值引用该对象。这是您的代码罐Javascript更新的示例:

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]
});