2016-04-08 33 views
0

我有一個註冊表單,我向用戶提供包含像(攝影,樂器)這樣的技能列表的巨大複選框列表。在註冊時,用戶根據他/她擁有的技能檢查多個複選框。然後我將用戶文檔的用戶技能保存在數據庫MongoDB中。根據從服務器返回的數據檢查複選框 - Node.js

下面是我的用戶架構的基本版本:

{ firstName: John, 
    lastName: Smith, 
    email: [email protected], 
    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技能已經是他們文件內。當他們從一大堆技能列表中編輯他們的技能時,技能已經被檢查。

任何幫助將不勝感激。

UPDATE:

{{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

在你的頁面:

<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) 
    } 
} 
+0

嗨,感謝您的回答。我目前在我的頁面中有兩個數組,第一個是'user.skills',它包含註冊時選擇的用戶技能和其他數組,名爲'completeSkills',其中包含數據庫中的所有技能,我正在使用'ng-repeat'迭代它們。我無法適應您的代碼。我用我的代碼更新了我的問題。任何建議都會很棒。 – Skywalker

+0

用你的對象編輯答案 – Nayish

+0

再次非常感謝你。你能解釋一下你在做什麼'indexOf(option)> -1' – Skywalker

0

您需要相交用戶VS模式,並給出選擇=真對那些相交的(意味着它們出現在你的用戶中,他有技巧)。

如果我這沒有錯的話很容易用做:

遍歷allskills而創建的複選框,如果他們在user.skills你讓他們所選擇

東西沿着

for each allskills 
if(allskills.indexOf(thiselement) > -1) { 
    //MARK it as selected 
} 
相關問題