2017-07-05 3 views
1

私はAngularJS、Ionic(v1)フレームワークを使用しています。モバイルアプリの画面が表示されると、チェックボックスがチェックされて&と表示され、ユーザーはチェックボックスをオンまたはオフにすることができます。チェックボックスは負荷が掛かってもチェックされますが、初めてチェックボックスをオフにすると、チェックボックスがオフになっていてもチェックボックスのステータス値は未定義です。これがチェックされた後、チェックボックスの値が真であるか偽であるかによって、ユーザがそれをチェックしたか、チェックを外したかによってうまく動作します。以下では、ネストされたng-repeatとチェックボックスを表示しているコードのhtmlセクションが表示されている場合です。また、表示できる複数のチェックボックスがあります。そのため、2番目のng-repeatを使用してチェックボックスのすべての値をロードします。 HTMLコードの下にコントローラのJavascript関数があります。Angularjsチェックボックスはonloadをチェックしましたが、ネストされたng-repeat内で最初にチェックをはずすと未定義となりました

togglegroup & isgroupshown関数は、ユーザーがExtrasの横にあるアイコンをクリックすると、チェックボックスを表示するかどうかを非表示にします。

HTML

<form name="list" class="list"> 
<div ng-repeat="(i, item) in menu_items track by $index"> 
<div class="item item-divider"> 
{{item.p_name}} 
</div> 
<select ng-show="item.Customizable == 1" ng-model="data.cmbIngredient[i]"> 
<option selected="selected" value="">Select the size</option> 
<option ng-repeat="x in item.ProductSizes" value="{{x}}"> 
{{x.ProductName}}: €{{x.ProductPrice | number:2}} 
</option> 
</select> 
<div> 
{{item.p_description}} 
</div> 
<!-- if the Extras value equates to 1 then the checkbox is displayed--> 
<div ng-show="item.Extras == 1"> 
<i ng-click="toggleGroup(item)" class="icon balanced icon" ng-class="isGroupShown(item) ? 'ion-minus' : 'ion-plus-round'"></i> Extras 
<label ng-repeat="(j, ext) in item.ExtraDetails track by $index" class="checkbox" ng-show="isGroupShown(item)"> 

<input type="checkbox" ng-checked="1" ng-change="AddExtras(data.data[j].chkextras[i],item.p_id)" ng-model="data.data[j].chkextras[i]"> {{ext.CIngredientName}} 

</label> 
</div> 
</div> 
</form> 

コントローラ機能

$scope.AddExtras=function(extraStatus,pid){ 
if(extraStatus == true){ 
    //pass it to service 
} 
else if (extraStatus == false){ 
    //pass it to a service 
} 
}; 
$scope.toggleGroup = function(group) { 
if ($scope.isGroupShown(group)) { 
$scope.shownGroup = null; 
} else { 
$scope.shownGroup = group; 
} 
}; 
$scope.isGroupShown = function(group) { 
return $scope.shownGroup === group; 
}; 

答えて

1

あなたは明確に問題が発生していることを読むことができthe docs for ng-checkedを読めば:

注このディレクティブは一緒に使用すべきではないということをngModelを使用すると、予期しない動作が発生する可能性があります。

結論:あなたはng-checkedng-modelを使用して、両方を混在させるべきではないのいずれか。

+0

Yaありがとうございます。しかし、ng-checkedを使用しないと、チェックボックスのonloadでチェックされた状態は機能しません。チェックを使用する伝統的なHTMLの方法を試してみました。それについてのどんな考えですか?再度、感謝します! – Ritz

+0

初期状態をチェックしたい場合は、 'ng-model'がtrueに評価されていることを確認する必要があります。つまり、この変数 'data.data [j] .chkextras [i]'が真であることを確認する必要があります。コントローラーで 'data.data [j] .chkextras [i]'をtrueに設定することができますか? – Wilt

+0

@Ritzはそれがあなたのために働いたと聞いて嬉しいです。 – Wilt

0

あなたはこのようなものを探しているはずです。 ng-true/false-value

+0

ng-true/false-valueは、チェックがチェックされているときとチェックされていないときにフェッチできるチェックボックスの値を設定します。だから1/0などを設定することができますそれはどのように問題に対処して理解していないのですか?ありがとう! – Ritz

関連する問題