Определение массива объектов схемы мангуста с помощью ng-model

#angularjs #node.js #mongodb #mongoose #ng-tags-input

#angularjs #node.js #mongodb #мангуст #ng-теги-ввод

Вопрос:

На данный момент я новичок в программировании, поэтому, пожалуйста, наберитесь терпения, если предоставленный материал недостаточно понятен, я сделаю все возможное.

Вот в чем проблема

 { 
    email: 'asdf',
    password: 'asdf',
    userlists: { 
        list1: [ [Object], [Object], [Object] ] 
    } 
}
  

Я хочу, чтобы терминал отправил мне обратно массив объектов в виде строк.

Я пытаюсь использовать эту схему,

user.js

 var mongoose = require('mongoose');
module.exports = mongoose.model('User', {
    email: String,
    password: String,
    userlists: {
        list1: {type:{ sublist1: String }},
        list2: {type:{ sublist2: String }}
    }
});
  

Я попытался установить значение userlists в массив объектов, это возвращает тот же нежелательный результат, а также пустые массивы list1 и list2, если они не заполнены.

Я хочу, чтобы пользователь использовал мой следующий $http.post метод вместе с ng-model , и я использую ngTagsInput директиву, позволяющую пользователю выбирать готовые «теги» при регистрации.

signup-controller.js

  $scope.createUser = function(){
     console.log($scope.newUser);
     $http.post('api/user/signup', $scope.newUser)
     .success(function(response){

     })
     .error(function(error){
         console.log(error);
     })
 };
  

signup.html

 <button ng-click="createUser()">Submit</button>

    <hr>
       <div>
        <tags-input ng-model="newUser.userlists.list1" display-property="sublist1">
          <auto-complete     source="tagsLoadedFromNgTagsInput($query)" 
                            min-length="1" 
                            load-on-focus="true"    
                            load-on-empty="true">
          </auto-complete>
        </tags-input>
       </div>
  

Вот результат, который я получаю от серверного терминала при выполнении.
Я хочу, чтобы объекты внутри массива отображались в виде строк, заданных вводом в signup.html выше.

 { 
    email: 'asdf',
    password: 'asdf',
    userlists: { 
        list1: [ [Object], [Object], [Object] ] 
    } 
}
  

Вот результат при входе db.users.find().pretty() в оболочку mongo:

 {
    "_id" : ObjectId("57efd2dbdcb311107b4830b2"),
    "email" : "asdf",
    "password" : "asdf",
    "userlists" : {
        "list1" : [
            {
                "sublist1" : "sometag1",
                "_id" : "57ed472b0c868aafab696b61"
            },
            {
                "sublist1" : "sometag2",
                "_id" : "57ed472b0c868aafab696b62"
            },
            {
                "sublist1" : "sometag3",
                "_id" : "57ed472b0c868aafab696b63"
            }
        ]
    },
    "__v" : 0
}
  

Кто-нибудь знает, что я здесь делаю не так?

Ответ №1:

console.log Функция обертывает объекты перед их отображением. Для обеспечения отображения всех данных вы должны преобразовать их в строку, используя JSON.stringify перед вызовом консоли.

 // Your object
var obj = {some: {nested: {object: {definition: 'hello world!'}}}};

// Print as a single line
console.log(JSON.stringify(obj));

// Print with 2 spaces identation
console.log(JSON.stringify(obj, null, 2));  

Комментарии:

1. Большое спасибо! Работает как шарм и имеет полный смысл 🙂

Ответ №2:

Используйте ng-repeat, поскольку list1 является массивом .

  <tags-input ng-repeat="list in newUser.userlists.list1">
                <div>{{list.sublist1}}</div>
 </tags-input>
  

Комментарии:

1. Я не уверен, что понимаю ответ, но у меня нет проблем с загрузкой моих тегов во внешнем интерфейсе, у меня проблемы с получением правильного вывода в серверной консоли. Спасибо за ответ, я ценю это!

2. использование console.log(Object.userlists.list1)