【问题标题】:Invalid selected value in drop downs : Failed to set selected value下拉列表中的选定值无效:无法设置选定值
【发布时间】:2014-04-10 05:46:52
【问题描述】:

我有动态生成下拉列表的代码。 我正在使用 ng-repeat 动态生成下拉列表,但我没有获得有效的选定值。
我已经更新了我的代码here
HTML

<div ng-repeat="item in items">
    <select ng-model="item.shareToOption" ng-options="c.value for c in shareToOptions"></select>
</div> 

JS

$scope.items = [
    {
    "shareToOption" : {id:1,value:"AA1"}
    },
    {
    "shareToOption" : {id:2,value:"AA2"},
    },
    {
    "shareToOption" : {id:3,value:"AA3"},
    },
    {
    "shareToOption" : {id:4,value:"AA4"}
    }
];

$scope.shareToOptions = [
    {id:1,value:"AA1"},
    {id:2,value:"AA2"},
    {id:3,value:"AA3"},
    {id:4,value:"AA4"}
];

更新 我不想对 JSON 对象进行任何更改,如何在不对 JSON 对象进行任何更改的情况下达到结果?

使用以下代码,我在模型中获得了正确的 id,但值没有得到更新。

<select class="form-control input-sm" ng-model="item.blockName.id" name="blockName" 
              ng-options="choice.id as choice.value for choice in blockNameOptions">

</select>   

参考:http://jsfiddle.net/LCJub/1/

将第一个下拉列表的值更改为 AA2,但我仍然将模型设为

[{"shareToOption":{"id":2,"value":"AA1"}},{"shareToOption":{"id":2,"value":"AA2"}},{"shareToOption":{"id":3,"value":"AA3"}},{"shareToOption":{"id":4,"value":"AA4"}}]

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    ngModel 通过引用而不是值进行比较。

    你需要引用来自$scope.shareToOptions的对象:

    $scope.shareToOptions = [
        {id:1,value:"AA1"},
        {id:2,value:"AA2"},
        {id:3,value:"AA3"},
        {id:4,value:"AA4"},
        {id:4,value:"AA5"},
        {id:4,value:"AA6"},
        {id:4,value:"AA7"}
    ];
    
    $scope.items = [
        {
            "shareToOption" : $scope.shareToOptions[0]
        },
        {
            "shareToOption" : $scope.shareToOptions[1]
        },
        {
            "shareToOption" : $scope.shareToOptions[2]
        },
        {
            "shareToOption" : $scope.shareToOptions[3]
        }
    ];
    

    演示http://jsfiddle.net/Xr8MU/

    如果您不想更改现有的两个数组,我建议在控制器初始化时重新映射 $scope.items 以使用正确的引用:

    var setReferences = function () {
        var items = $scope.items;
        for (var i = 0; i < items.length; i++) {
            var reference = $scope.shareToOptions.filter(function (option) {
                return option.id === items[i].shareToOption.id;
            })[0];
    
            items[i].shareToOption = reference;
        }
    };
    
    setReferences();
    

    演示http://jsfiddle.net/whNzw/

    【讨论】:

    • :我不想对JSON对象做任何改变,如何在不改变JSON对象的情况下达到上述效果?
    • 两个数组是否需要与您的示例完全相同?
    • 你能解释一下,我该怎么做?
    • :现在我正在更新模型中的 id,但我的值仍然很旧。参考:jsfiddle.net/LCJub/1
    • 再次更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多