0

モバイルからAPIに真のチェックボックス値を送信して、選択した調味料で注文できるようにするという考えでしたが、それを把握することはできません。API への HTTP GET 呼び出しから調味料が返されます。

<ion-checkbox ng-repeat="condiment in condiments" ng-model="condiment.checked"
                          ng-checked="checkItem(condiment.id)">
                {{condiment.name}}
                {{condiment.price}}
</ion-checkbox>

次の関数を呼び出します。

$scope.checkItem = function (id) {
            return $scope.condiments[id-1].checked = true;
};

(マイナス 1 は、ID が 1 から始まり、配列が 0 から始まるためです)しかし、チェック/チェック解除されたときに呼び出されるのではなく、デフォルトですべてのリソースがチェックされ、クリックしてチェックを外しても何も変わりません。

プロパティ「checked」は、調味料の元の JSON API 出力の一部ではありません。ID、名前、価格があります。

質問:

チェックした ID をサーバーに送り返すより簡単な方法はありますか?

編集:

以前にデフォルトの変数を設定しようとしましたが、何もしません:

for(var i=0; i<$scope.condiments; i++){
            $scope.condiments[i].checked = false;
}
4

3 に答える 3

1

チェックボックスhttps://docs.angularjs.org/api/ng/directive/ngCheckedでAngular Docsを確認できます。ng-modelを使用しないでくださいng-checked。予期しない結果につながる可能性があることを明確に示しています。

削除できng-checkedます...

<ion-checkbox ng-repeat="condiment in condiments" ng-model="condiment.checked">
            {{condiment.name}}
            {{condiment.price}}
</ion-checkbox>

コントローラーでは、調味料IDを取得できます

$scope.checkItems = function(){
    var CID = [];
    angular.forEach($scope.condiments,function(condiment){
        if(condiment.checked){
           CID.push(condiment.id);
        }
    });

    //send CID to server
};
于 2016-04-29T06:57:25.583 に答える
1

私もこの種の問題に直面し、このように使用してこれを解決しました。

 <input type="checkbox" ng-model="condiment.checked" ng-true-value="1"
        ng-false-value="0" ng-checked="condiment.checked == 1">

これにより、ng-checkedTrue が json で直接変更されます。その後、コンソールを操作するだけで API "condiments"、答えが得られます。

そして、デフォルトで False をチェックして設定したい場合は、 , を使用してng-init="condiment.checked=0"ください。したがって、チェックした場合は True が返され、それ以外の場合は False が返されます。

于 2016-04-29T06:46:13.170 に答える
1

これを試してみてください。これがあなたのために作成されたフィドルです。これを見る

<div ng-app="myApp">
    <div ng-controller="MyCtrl">
        <div ng-repeat="(key,val) in condiments">
            <input type="checkbox" ng-model="selected[val.id]" 
                   ng-click="checked(key,selected[val.id])"
                   ng-true-value="true" ng-false-value="false">
              {{val.name}}
        </div>
        <br>
        <br>
        <div>added status into main array
            <br>{{condiments}}</div>
    </div>
</div>

ここにコントローラーとロジックがあります

var myApp = angular.module('myApp', []);

    function MyCtrl($scope) {
        $scope.selected = {};
        $scope.condiments = [{ id: 1, name: "item1", price: 100 },
                             { id: 2, name: "item2", price: 200 },
                             { id: 3, name: "item3", price: 300 }];
        angular.forEach($scope.condiments, function(val, index) {
            $scope.selected[val.id] = "true";
            $scope.condiments[index].checked = true;
        })
        $scope.checked = function(key, status) {
            if (status == "true") {
                $scope.condiments[key].checked = true;
            } else {
                $scope.condiments[key].checked = false;
            }
        }
    }
于 2016-04-29T07:14:43.747 に答える