2015-09-30 53 views
1

頁面加載後,模型和單選按鈕正確顯示。Angularjs:單選按鈕檢查狀態無法綁定模型值,當模型更改時

但是,當單擊按鈕更改列表項目的等級時,單選按鈕檢查狀態有些問題。您可以看到模型值是正確的,它顯示在左側。

那麼,爲什麼按鈕沒有檢查,以及如何解決它?

非常感謝

HTML:

<body ng-app="RadioApp"> 
<section ng-controller="RadioController"> 
    <div ng-repeat="item in list"> 
     <div ng-model="item.rank">Rank: {{$index + 1}}</div> 
     <div> 
      <span>{{item.flag}}</span> 
      <span><label><input type="radio" name="flag_{{$index}}" ng-model="item.flag" value="1">red</label></span> 
      <span><label><input type="radio" name="flag_{{$index}}" ng-model="item.flag" value="2">green</label></span> 
      <span><label><input type="radio" name="flag_{{$index}}" ng-model="item.flag" value="3">yellow</label></span> 
      <span><label><input type="radio" name="flag_{{$index}}" ng-model="item.flag" value="4">blue</label></span> 
      <span><label><input type="radio" name="flag_{{$index}}" ng-model="item.flag" value="5">pink</label></span> 
     </div> 
    </div> 
    <div> 
     <button ng-click="changRank()">change</button> 
    </div> 
</section> 

JS:

var app=angular.module("RadioApp", []); 
app.controller("RadioController", function($scope){ 
    $scope.list = [{flag:1},{flag:3},{flag:5}] 

    $scope.changRank = function(){ 
     var targetRule = $scope.list.splice(2, 1); 
     $scope.list.unshift(targetRule[0]); 
    } 
}); 

PS:我是一個新用戶,很抱歉無法提供的提問捕獲。

回答

0

啊,只要你轉發器更改爲

ng-repeat="item in list track by $index" 

這將迫使角只能由他們的陣列中的位置保持跟蹤你的list項目。

Plunker演示 - http://plnkr.co/edit/Hszr5FjKblQGip7kc8Q1?p=preview

+0

驚人的,它的工作原理。非常感謝你。你能解釋爲什麼可以顯示該值,但單選按鈕無法顯示,或者如果你有時間,可以給出一些提示來理解它。並且正在使用'track by $ index'ng-repeat的最佳做法? –

+0

嗨,@菲爾。在我的項目中,它使用的Angular.js 1.0.3不支持按表達式進行跟蹤。如何解決該版本中的問題? –

+0

不知道。你知道1.0.3現在快三歲了 – Phil

相關問題