根据服务器返回的数据检查复选框 - Node.js

时间:2016-04-08 13:14:00

标签: javascript angularjs node.js mongodb checkbox

我有一个注册表单,我向用户提供一个复选框列表,其中包含列表非常大的技能(如摄影,乐器)。在注册时,用户根据他/她具有的技能检查多个复选框。然后我将用户文档中的用户技能保存在数据库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>

2 个答案:

答案 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
}