AngularJS - Ng-repeat 带有单选按钮和布尔值

AngularJS - Ng-repeat with radio buttons and boolean value

我有一个 Book-objects 数组,每个数组都有 boolean 属性 Favorite。只有一本书的收藏夹设置为 true

我正在使用 ng-repeat 显示这些书籍,我希望能够使用单选按钮设置最喜欢的书籍。但是,即使在页面加载时 select 编辑了正确的单选按钮,当我 select 一个不同的单选按钮时,模型也不会更新布尔值。

这是我的代码:

<ul>
    <li ng-repeat="book in vm.Books">
        {{book.Name}}
        <input name="book" type="radio" ng-model="book.Favorite" ng-value="book.Favorite" /> 
    </li>
<ul>

如何根据选中的单选按钮使用正确的 Favorite 值更新模型?

以下是接近的,但当您选择另一个(我假设您想要?)时,不会将 book.Favorite 设置为 false

<li ng-repeat="book in vm.Books">
  {{book.Name}}
  <input name="book" type="radio" ng-model="book.Favorite" ng-value="true">
</li>

我会改走这条路:

<li ng-repeat="book in vm.Books">
  {{book.Name}}
  <input type="radio" ng-click="vm.setFavorite(book)" ng-checked="book.Favorite">
</li>

并且:

vm.setFavorite = function(book) {

  vm.Books.forEach(function(b) {
    b.Favorite = book === b;
  });
};

演示: http://plnkr.co/edit/UKGQW1dd8M5UiEbUCxWd?p=preview