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属性只接受字符串,而不接受对象(检查here)。当你这样做时:value="{{ list }}",你基本上是在做input.value = list.toString()

一种可能的解决方法是使用指令$index的。ng-repeat示例:http: //jsfiddle.net/bmleite/cKttd/

于 2013-02-12T14:01:17.193 回答
3

现在可以使用ng-value.

例子

<input ng-model="$parent.listGroup" id="listGroup-{{ list.value }}" name="listGroups" ng-value="{{ list }}" type="radio" />

于 2016-04-05T13:04:21.467 回答
1

为什么要将对象作为 ng-model?这就是导致您的 listGroup 变量变为字符串的原因,因为 ng-model 仅适用于字符串。如果你有一个复杂的对象要与 ng-model 一起使用,你应该创建一个指令并实现一个解析器和一个格式化程序,如下所示:如何在 angular.js 中进行双向过滤?

于 2013-02-12T13:53:24.430 回答
0

您也可以 JSON.parse(object-in-string) ,但我认为我更喜欢 @bmleite 解决方案。只是把它扔在那里——以防有人有不同的用例。

于 2016-05-20T16:27:04.970 回答