Javascript 所选内容在AngularJS MultiSelect绑定中不存在
我试图在视图中将多选中的选定值显示为单独的对象,这意味着选定值将出现在窗体的其他位置;实际的multiselect将被隐藏,只需发布选定的值,以便将其绑定到viewmodel服务器端(ASP.NET MVC) 这似乎是可行的。然而,AngularJS将在ID前面加上'string:'前缀,因此我必须使用Javascript 所选内容在AngularJS MultiSelect绑定中不存在,javascript,angularjs,asp.net-mvc,Javascript,Angularjs,Asp.net Mvc,我试图在视图中将多选中的选定值显示为单独的对象,这意味着选定值将出现在窗体的其他位置;实际的multiselect将被隐藏,只需发布选定的值,以便将其绑定到viewmodel服务器端(ASP.NET MVC) 这似乎是可行的。然而,AngularJS将在ID前面加上'string:'前缀,因此我必须使用track by。如果我这样做,multiselect开始表现出奇怪的行为,也就是说,如果我选择了一个选项,该选项将立即再次取消选择,除非我单击该选项两次。我不知道那里发生了什么事 下面是代码,有
track by
。如果我这样做,multiselect开始表现出奇怪的行为,也就是说,如果我选择了一个选项,该选项将立即再次取消选择,除非我单击该选项两次。我不知道那里发生了什么事
下面是代码,有人知道我遗漏了什么吗?似乎是ng options指令()的问题 我还在angularjs文档中找到了一些信息: “在同一表达式中使用“选择为”和“跟踪方式”时要小心。” 我用叉子叉了你的扑克牌,用了一个带有ng repeat的
标签:
问题在于生成器模式
value.id as value.name
,尽管文档中声明了这一点,但它已经被破坏了一段时间
并将select
标记更改为:-
<select id="tracking" multiple="multiple" ng-model="vm.selected"
ng-options="value.name for value in vm.values track by value.id">
如果您现在在浏览器中检查此元素,您将看到选项
元素的值
属性上没有不需要的“字符串:”前缀
为了让您放心,我还编写了一个函数,用于提取表单提交后将发送到服务器的值
但是,由于我的更改,
vm.selected
数组中的项不再是字符串ID,而是实际对象本身。因此,请记住在引用数组成员的代码中添加.id
,例如vm.selected[i].id
而不是vm.selected[i]
两个同样有效的答案是一个艰难的选择,我选择了这个解决方案,因为它是入侵最小的,非常感谢!好的,这确实是一个角度错误。感谢您提供的背景信息和有效的解决方案。虽然我将采用第二个建议的解决方案,但我将采用您对plunkr所做的一些更改,所以我也投票支持这个答案。