1

テーブルの (.estimates) tbody に追加するディレクティブを使用する追加ボタンがあります。

function EstimateCtrl( $scope, $compile ) {

    $scope.services = [
            { 'value': 'c', 'name': 'Standard Courier' },
            { 'value': 'xc', 'name': 'Express Courier' },
            { 'value': 'cc', 'name': 'Country Courier' }
    ]

    $scope.add = function() {

        angular.element('.estimates tbody').append( $compile('<tr estimate></tr>')($scope) );

    }

}

angular.module('dashboard', [])
    .directive('estimate', function() {

        return {

            restrict: 'A',
            template: '<td><input type="text" placeholder="Suburb"/></td><td><select ng-model="estimate.service" ng-options="service.value as service.name for service in services" class="form-control"></select></td><td>$0.00</td><td><button type="button" class="remove">x</button></td>',
            link: function( scope, element, attrs ) {

                element.find('.remove').bind('click', function() {

                    element.closest('tr').remove();

                });

            }

        }

    });

angularjsでng-modelを使用して要素配列を作成するにはどうすればよいですか? 例えば:

<select name="foo[]"></select>

<select ng-model="foo[]"></select>

私は1日半掘り回っていますが、休憩をとることができないようです. 誰かが私を正しい方向に向けてくれることを願っていました。助けてくれてありがとう。


編集:これはプランカーへのリンクです。これを見た後、誰もが私が何をしているのかを知っていると確信しています: http://plnkr.co/edit/JlYB9P0vyAqghOmeNYh4


Edit2:私が何を求めているかを示すために、別の例をすべて挙げることができるかどうか見てみましょう

<form method="POST" action="">

<!-- I was attempting to do ng-model="estimate.service[]" but of course this doesn't work -->
<select name="estimate[service][]">
    <option value="foor">Foo</option>
    <option value="bar">Bar</option>
</select>
<select name="estimate[service][]">
    <option value="foor">Foo</option>
    <option value="bar">Bar</option>
</select>
<select name="estimate[service][]">
    <option value="foor">Foo</option>
    <option value="bar">Bar</option>
</select>

<input type="submit" value="Submit"/>

</form>

<?php

if ( $_POST )
{

    print_r( $_POST['estimate']['service'] );

}

?>

出力

ここに画像の説明を入力

4

2 に答える 2

6

オーライ!私はなんとか回避策を見つけることができました。

私はディレクティブを放棄し、別の方法でそれを行いました。これが私の作業コードです:

HTML:

<div ng-controller="Ctrl">
    <table>
        <tbody ng-repeat="service in estimate.services">
            <tr>
                <td><input type="text" placeholder="Suburb"/></td>
                <td>
                    <select ng-model="estimate.services[service.name]" ng-options="option.value as option.name for option in options" class="form-control"></select>
                </td>
                <td>$0.00</td>
                <td><button type="button" class="remove">x</button></td>
            </tr>
        </tbody>
    </table>
</div>

JavaScript:

function Ctrl( $scope, $compile ) {

    $scope.estimate.services = [
        { name: 'service1', value: '' }
    ];

    $scope.options = [
        { name: 'Option 1', value: 'opt1' },
        { name: 'Option 2', value: 'opt2' },
        { name: 'Option 3', value: 'opt3' }
    ];

    $scope.add = function() {

        $scope.estimate.services.push({
            name: 'service' + ($scope.estimate.services.length + 1),
            value: ''
        });

    };

}
于 2013-09-17T03:06:46.937 に答える
0

編集:

さて、構成可能なオプションの配列が 2 つあるとしましょう。

options1=[...]
options2=[...]

私の理解が正しければ、そのうちの 1 セットを選択できるようにする選択ボックスが必要ですか? したがって、最初に、それらの両方を別の配列で囲むか、前述のように別のオブジェクトで囲む必要があります。

それでは、オブジェクトを使用してみましょう(配列の例も提供できます)

var $scope.myOptions ={'LabelForOptions1' : options1, 'LabelForOptions2' : options2}

次に、選択したオプションを保存する場所が必要です

 $scope.selectedOptions = {};

そして最後に選択ボックス自体

<select ng-model="selectedOptions" ng-options="value as key for (key,value) in myOptions"></select>

options1 および options2 変数も単一の値である可能性があり、例は引き続き機能することに注意してください

問題に対する完全な解決策:これがあなたのモデルだと思います:

function MyController($scope) {
    $scope.options1 = ['Foo1','Bar1'];
    $scope.options2 = ['Foo2','Bar2'];
    $scope.options3 = ['Foo3','Bar3'];
    $scope.allOptions = [$scope.options1, $scope.options2, $scope.options3];
    $scope.selectedOptions = ["none","none","none"];
};

したがって、これが解決策になります。

<!DOCTYPE html>
<html ng-app>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js"></script>
    <script src="./js/myAngular.js"></script>
</head>
<body ng-controller="MyController">
<div><select ng-repeat="option_set in allOptions"ng-model="selectedOptions[$index]" ng-options="value for value in option_set">
</select></div>
</body>
</html>

作業例: http://jsfiddle.net/qGRQF/11/

于 2013-09-15T09:14:36.660 に答える