select 中的 ng-options 返回对象而不是字符串

ng-options in select returning an Object instead of String

我正在努力学习 Angular 并且我处于最基本的步骤中。我对此进行了搜索,但找不到任何可以帮助我的东西。

我对 ng-options 有疑问。当我按下触发 addSword(sword) 的按钮时,我希望它将 $scope.elems.object.name 插入 {{sword.elem}},但我收到的却是 $scope.elems.object。 更好的解释是,sword.elem 显示 {"name":"Water" , "beats":"Fire"} 而不仅仅是 'Water'。我可以使用 sword.elem.elem,但我可以看到这里有问题。

有些奇怪:我的 Select 菜单显示正确的值。

感谢您的帮助,如果有关于此问题的答案但我找不到,我们深表歉意。

index.html

<tr ng-repeat="sword in swords">
    <td>{{sword.name}}</td>
    <td>{{sword.attack}}</td>
    <td>{{sword.desc}}</td>
    <td>{{sword.elem.name}}</td>
</tr>
...
<select class="form-control" ng-model="sword.elem" 
    ng-options="elem.name for elem in elems">
    <option value="">Selecione uma elem</option>
</select>
<button class="btn btn-primary btn-block" ng-click="addSword(sword)" 
    ng-disabled="!sword.name || !sword.elem || !sword.attack">Add Sword</button>

控制器

$scope.elems = [
    {name: "Fire", beats: "Earth"},
    {name: "Water", beats: "Fire"}
];

$scope.addSword = function(sword){
        $scope.swords.push(angular.copy(sword));
        delete $scope.sword;
    }

据我了解,您想将所选的剑添加到您的剑列表中。您需要使用 ngOptions select As

标记:

<select class="form-control" ng-model="sword" 
    ng-options="elem as elem.name for elem in elems">
    <option value="">Selecione uma elem</option>
</select>
<button class="btn btn-primary btn-block" ng-click="addSword(sword)" 
    ng-disabled="!sword">Add Sword</button>

plunker

好吧,我已经尝试了一些东西。阅读 Angular 文档,也无法弄清楚。

我想要的是将 ng-options 选择传递到 ng-model 'sword-elem'。 ng-options 选择由两个对象提供:

        $scope.elems = [
        {name: "Fire", beats: "Earth"},
        {name: "Water", beats: "Fire"}
    ];

我希望我的 ng-model='sword.elem' 收到 $scope.elems.name。 提交我的表单后,将创建以下对象:

{"name":"Stack Question",
"attack":"66",
"desc":"You shall answer this sword.",
"elem": {"name":"Fire","beats":"Earth"}
}

但我正在尝试接收这样的内容:

{"name":"Stack Question",
"attack":"66",
"desc":"You shall answer this sword.",
"elem": "Fire"}
}

我目前的解决方法是打印 {{sword.elem.name}} 而不仅仅是 {{sword.elem}}。