Активно обновлять значения массива

У меня есть проект angular2-meteor, у меня есть коллекция этого объекта:

{ name:"name1", value:4 }

и я хочу массив значений свойства, как:

[1, 2, 3, 4]

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

this.collectSub = MeteorObservable.subscribe('collection', options).subscribe(() => {
    this.objects = MyCollection.find({}, {
      sort: {
        name: nameOrder
      }
    }).zone();
  });

Я пытаюсь использовать функцию карты над this.object, но это не работает.

Любая помощь приветствуется. Спасибо

1 ответ

Решение

Вы пробовали это:

this.collectSub = MeteorObservable.subscribe('collection', options).subscribe(() => {
    this.array = MyCollection.find({}, {
      sort: {
        name: nameOrder
      }
    }).map((item) => item.value).zone();
  });

??

если вы не хотите использовать карту на курсоре, вы можете использовать карту следующим образом:

let collectionMock = [{name:"name1", value:1},{name:"name2", value:2},{name:"name3", value:3},{name:"name1", value:4}];
let result = collectionMock.map((item) => item.value);

Я действительно не знаю угловой путь, но я думаю, что если this.objects является ReactiveVar, вы можете обернуть выполнение вашей карты с помощью Tracker.autorun, например:

Tracker.autorun(() => {
    this.resultArray = this.objects.map((item) => item.value);    
    });
Другие вопросы по тегам