我有一个注册表单,我向用户提供一个复选框列表,其中包含列表非常大的技能(如摄影,乐器)。在注册时,用户根据他/她具有的技能检查多个复选框。然后我将用户文档中的用户技能保存在数据库MongoDB中。
以下是我的用户架构的基本版本:
{ firstName: John,
lastName: Smith,
email: john.smith@something.com,
skills: [
"photography",
"music",
"programming",
"mathematical skills"
]
}
重要提示:
我的mongoDB中有一个Skills
模式。这基本上是一大堆技能,一个基本的例子:
{ id: 1287638712687312
allSkills: [
"photography",
"music",
"programming",
"mathematical skills"
"another",
"another",
and so on
]}
我的问题:
我希望用户能够编辑他们的技能(删除或添加更多)。我使用ng-repeat
来迭代Skills
架构中的所有技能。
我想要做的是,在我使用ng-repeat
显示编辑技能页面中的所有技能时,已经选择了当前用户文档中的所有技能。
通过这种方式,用户可以轻松查看他们当前的技能,并根据他们的要求选中或取消选中。
示例:
如果用户已在其文档中具有music
技能。当他们从大量技能中编辑他们的技能时,music
技能已被检查。
非常感谢任何帮助。
更新
{{user.skills}} // contains skills from users document
<div ng-repeat="skill in completeSkills">
<label ng-repeat="x in skill.allSkills">
<input type="checkbox" value="{{x}}" ng-checked=""> {{x}}
</label>
</div>
答案 0 :(得分:0)
在您的信息页中:
<input type="checkbox" ng-repeat="option in completeSkills ng-checked="user.skills.indexOf(option) > -1" ng-change="toggle(option,user.skills)">
<label>{{ option }}
在您的控制器中:
$scope.toggle = function (option, options) {
var index = options.indexOf(option)
if (index >-1) {
options.splice(index,1);
} else {
options.push(option)
}
}
答案 1 :(得分:0)
您需要将用户与架构相交,并将selected = true赋予相交的(意味着它们存在于您的用户中,他具备该技能)。
如果我没有弄错的话很容易做到:
在创建复选框时迭代所有技能,如果它们在user.skills中,则将其设置为选中
for each allskills
if(allskills.indexOf(thiselement) > -1) {
//MARK it as selected
}