Мангуста ассоциаций печатают в ngFor - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть эта модель user.js

const userSchema = new Schema({

    name: String,
    ...
    skills: [{
        type: Schema.Types.ObjectId,
        ref: 'skill'
    }]
})

и модель skill.js

const skillSchema = new Schema({
     name: String,
     user: {
         type: Schema.Types.ObjectId,
         ref: 'user'
     },
})

Когда я получаю всех пользователей в Angular, в html я делаю:

<div *ngFor="let user of arrUsers">
     ...
     <span *ngFor="let skill of user.skills">
           ******{{PRINT skill name}}******
     </span  

</div>

Пользователь в mlab выглядит следующим образом:

{
    "name": "a user name"
    "skills": [
        {
            "$oid": "5c17a4269ef5b511ece55446"
        }
    ],
}

и навыки:

{
    "_id": {
        "$oid": "5c17a4269ef5b511ece55446"
    },
    "name": "JAVA",
    "user": {
        "$oid": "5bf44809a15006343bc95718"
    },
    "__v": 0
}

в контроллере пользователя я получаю таких пользователей:

findAll: (req, res) => {
    User.find()
        .then(users => {
            res.json(users);
        }).catch(err => {
            res.status(500).send({
                msg: err.message
            });
        });
},

и массив навыков пользователя в консоли arrUsers записывает это:

... skill: Array (3)

0: "5c18dd0084a030698e17cd40"

1: "5c18dd0384a030698e17cd42"

2: "5c18dd0584a030698e17cd43" ...

Должен ли я каким-либо образом заполнять навыки в findAll?

Что такоелучший способ напечатать имя навыка?

РЕШЕНИЕ

Я должен был выполнить User.find (). populate ('skills) в моем контроллере

Благодаря ответу Златко

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Это просто связывание, используйте ваш код следующим образом -

 <span *ngFor="let skill of user.skills">
   {{skill?.name}}   //Here skill is your object contains data having keys name and user
 </span>

PS: для отладки всегда лучше использовать json трубу на стороне шаблона, как это -

{{skill | json}}
0 голосов
/ 18 декабря 2018

При заполнении запроса вам необходимо заполнить навыки.

Что-то вроде:

db.users.get(query).populate('skills')

Затем необходимо заполнить массив ваших навыков.

0 голосов
/ 18 декабря 2018

просто распечатать skill.name

<span *ngFor="let skill of user.skills">
       {{skill.name}}
 </span  
...