7

私のHTMLファイルには次のものがあります:

    <td style="width: 200px;">
        <span ng-repeat="list in listGroups">
            <label for="{{ list.description }}" />{{ list.description }}</label>
            <input ng-model="$parent.listGroup" id="listGroup-{{ list.value }}"  name="listGroups" value="{{ list }}" type="radio" />
        </span>
   </td>

listGroups には以下が含まれます。

[
    {
        "description": "New by Territory",
        "group": "product",
        "type": "new"
    },
    {
        "description": "New by Genre",
        "group": "genre",
        "type": "new"
    },
    {
        "description": "Charts by Territory",
        "group": "product",
        "type": "chart"
    },
    {
        "description": "Charts by Genre",
        "group": "genre",
        "type": "chart"
    }
]

ラジオ ボタンをクリックすると、listGroup (ng-model で設定) は次のようになります。

{"description":"New by Genre","group":"genre","type":"new"}

listgroup をtypeof $scope.listGroupで見ると、文字列になっていることがわかりました。

そのため、HTML ページの残りの部分にある他のバインディングのプロパティにアクセスできません。

この場合、私は欲しいng-show="listGroup.group == 'genre'"

ここで何が起こっているのか、さらに重要なことは、オブジェクトをオブジェクトとして保持するという、私がやりたいことをどのように行うのでしょうか?

皆さんありがとう

デイブ

4

4 に答える 4

4

問題は、入力のvalue属性が文字列のみを受け入れ、オブジェクトを受け入れないことです (ここを確認してください)。これを行うとき: value="{{ list }}"、基本的にやっていinput.value = list.toString()ます。

$index考えられる回避策の 1 つは、ng-repeatディレクティブの を使用することです。例: http://jsfiddle.net/bmleite/cKttd/

于 2013-02-12T14:01:17.193 に答える
1

オブジェクトを ng-model として持ちたいのはなぜですか? ng-model は文字列でのみ機能するため、これが listGroup 変数を文字列にする原因です。ng-model で使用したい複雑なオブジェクトがある場合は、次のようにディレクティブを作成し、パーサーとフォーマッターを実装する必要があります

于 2013-02-12T13:53:24.430 に答える
0

JSON.parse(object-in-string) もできますが、 @bmleite ソリューションの方が好きだと思います。誰かが別のユースケースを持っている場合に備えて、これをそこに捨てるだけです。

于 2016-05-20T16:27:04.970 に答える