2015-02-10 159 views
0

這裏的HTML內置:AngularJS單選按鈕的設定值採用NG-重複

<div> 
    <ul> 
     <li ng-repeat="answer in answers"> 
      <input type="radio" ng-model="$parent.selectedAnswer" name="answerText" value="{{answer.answerID}}"/> 
      <label>{{answer.answerText}}    
      </label> 
     </li> 
    </ul> 
</div> 

需要的是所選答案存儲到LocalStorage,每當這個問題再次表明了,標記與單選按鈕那個答案。 我可以將它存儲在LocalStorage中,檢索它,但是當我更新模型時,它不會選擇UI上的單選按鈕。

在我的控制,我只是要求 -

$scope.selectedAnswer = value.answerID; 

其中值點答案存儲在LocalStorage。 請幫忙。


編輯:

更詳細一點:

我管理使用單一的路線和控制整個測驗頁面。當一個問題完成時,我會提取下一個問題及其相應的答案。在控制器($scope.answers)中填充answers陣列時,我正在檢查是否將其ID與存儲在LocalStorage中的答案相匹配。在每個問題之間,answers陣列被清空並再次填充。

+0

它看起來像你使用的是孩子和家長控制。你能展示足夠多的東西來涵蓋孩子和父母控制者嗎?另外,你在設置$ scope.selectedAnswer = value.answerID? – restassured 2015-02-10 23:15:04

+0

沒有。沒有子/父控制器,只有一個控制器分配給該部分。你在'ng-model'中看到'$ parent $'的原因是因爲'ng-repeat'創建了它自己的'$ scope'。 – 2015-02-10 23:18:34

+0

當你說「LocalStorage」時你的意思是在JavaScript中嗎?或在這種情況下$範圍? – njfife 2015-02-10 23:28:27

回答

2

所以,你應該使用ng-value要做到這一點,因爲它是一個角度的表達,而不是一個文本值。像你在Plnkr工作時一樣使用價值,但我知道有時它不會。

另外一般情況下,我發現使用ng-controller="<ControllerName> as <ThisRef>"在大多數情況下工作更好。有時候你仍然需要$ scope變量(比如表單驗證),但是通常情況下,當在$ scope中使用控制器「this」變量時,我有更少的範圍問題。

我用我描述的方法做出了榜樣:

http://plnkr.co/edit/XV3we6SDmmLmUGSwdVVT?p=preview

如果您的問題與HTML 5本地存儲做讓我知道,我不知道


編輯: 或者,您可以嘗試使用$scope.$apply();來完成此操作。如果範圍與視圖不同步,則應用應該修復該問題。

這是另一個plnkr,展示了我通常會如何做這樣的事情。請注意,該示例中的$ apply是不需要的,但可能需要在您的示例中。

這是我的例子:

$scope.updateModel = function(value) { 
     $timeout(function() { 
     $scope.$apply(function() { 
      $scope.selectedAnswer = value; 
     }); 
     }); 
    }; 

通知我使用$超時,以確保同時有正在進行的消化它不會發生。

http://plnkr.co/edit/O7CBfTiWPrsbthFKlAOZ?p=preview

我希望這有助於編輯=)

+0

你是對的。接下來我正要建議ControllerAs語法,但是你打敗了我。 – restassured 2015-02-10 23:36:58

+0

我也試過'ng-value',不起作用。是的,我的問題是關於'HTML5 LocalStorage',但我不認爲這應該是一個問題,因爲我只是存儲答案ID並檢索它們。 – 2015-02-10 23:38:50

+0

我的夢想家也沒有完成你想要做的事情?也許我不明白這個問題 – njfife 2015-02-10 23:39:49

-1

由於您只有一個控制器,因此不需要指定$ parent。

<div> 
    <ul> 
     <li ng-repeat="answer in answers"> 
      <input type="radio" ng-model="selectedAnswer" name="answerText" value="{{answer.answerID}}"/> 
      <label>{{answer.answerText}}    
      </label> 
     </li> 
    </ul> 
</div> 
+1

是的,你很抱歉,但是這是不正確的,ng-repeat有它自己的範圍你的方法不會產生預期的結果 – njfife 2015-02-10 23:33:06

+0

他是一個plnkr顯示,這是不正確的:http://plnkr.co/edit/BCaualli3sMJeM1YVdjF ?p =預覽 你真的想要它這樣工作,它使ng-repeat更有用 – njfife 2015-02-10 23:37:06