2014-09-30 107 views
1

我有,有一個表格/控制器,基本上是這樣的(歸結爲相關的東西)的angularjs應用:未選中的單選按鈕值

angular.module('testApp', []) 
    .controller('testCtrl', function ($scope) { 
    $scope.envelopes = [{ 
     id: 1, 
     name: 'first', 
     default_spend: '1' 
    }, { 
     id: 2, 
     name: 'second', 
     default_spend: '0' 
    }, { 
     id: 3, 
     name: 'third', 
     default_spend: '0' 
    }, ]; 
}); 

而且看起來大致是這樣一種形式這樣的:

<div ng-app="testApp"> 
    <div ng-controller="testCtrl"> 
     <div ng-repeat="envelope in envelopes"> 
      <div>{{envelope.name}} 
       <input type="radio" name="default_spend" ng-model="envelope.default_spend" ng-value="1" /> 
       Default Spend: {{envelope.default_spend}} 
      </div> 
     </div> 
    </div> 
</div> 

您可以在行動this fiddle看到這一點。如你所見,第一個信封被標記爲default_spend信封,而另外兩個信封則不被標記爲default_spend信封。當我選擇不同的信封時,該信封也被標記爲default_spend,但是當單選按鈕未被選中時,模型值保持不變(「1」)。我明白,由於ng-repeat,我正在處理一個子範圍,但是有沒有辦法讓我設置一個「未選中」的值,而不必通過ngChange跳過?

+0

我不明白..無論選擇變爲1等復位爲0?當你使用ng值時,它將被綁定到選擇的ng模型上。 – PSL 2014-10-01 01:44:51

+0

添加「Default Spend:1/0」部分只是爲了看看設置爲envelope.default_spend的內容。理想情況下,如果選擇收音機,該值爲1(開),否則爲0(關)。關於部分工作正常,但關閉不。我明白爲什麼,但我認爲將ng-model的值設置爲「」,如果沒有選擇收音機,並且選擇「1」(或任何{ng-}值),將會更合乎邏輯。 – jloosli 2014-10-01 19:01:45

回答

2

不是。當你使用ng-value這是什麼將被綁定到ng-model,在你的情況下,他們都具有價值1.同時我真的沒有得到切換1和0的目的,但是你可以這樣實現它: -

<input type="radio" name="default_spend" 
     ng-click="selected.envelope = envelope" /> <!--Register an ng-click and set selected one 
     Default Spend: {{getDefSpend(envelope)}}</div> <!-- Show the text based on selection--> 

而在你的控制器: -

$scope.selected = {envelope: $scope.envelopes[0]}; 

$scope.getDefSpend = function(envelope){ 
    return $scope.selected.envelope === envelope ? 1 : 0; 
} 

//$scope.selected.envelope will be your selected option at any point. 

Demo

0

這是因爲你擁有的實際上是3種不同的模型值。要按照您的要求工作,您將擁有所有3個模型的值。您可以重新構造數據,也可以使用ng-change手動修改模型。