Vuejs-如何从Observable

时间:2018-07-27 01:46:48

标签: vue.js vuejs2 vue-router vue-rx

一个朋友使用vuejs构建了一个项目,我一直在寻找如何进行修复的方法,但是vuejs不是我的主要技能。

该项目是使用vuejs + vue-rx + firebase构建的。

我们有一个将项目保存到数据库的表单,正在运行。现在,我需要从firebase中获取项目数量,以构建项目名称,例如:Name #xx,其中xx是项目数量+ 1。

该表格位于route / property.NewProperty.vue中。最后定义了一个方法:

methods: {
    createProperty () {
      const {property, $rxFirebase: {actions: {properties}}} = this
      properties.create(property).then(propertyId => this.$router.push('/properties'))
    }
  }

create方法在以下位置定义:actions / properties / create.js

export default function (rxfb) {
  return async function (property) {
    const userId = (await rxfb.sources.user.getAuth().take(1).toPromise()).uid
    const propertyRef = rxfb
      .database
      .ref('properties')
      .push()
    const propertyRefRef = rxfb
      .database
      .ref('users')
      .child(userId)
      .child('properties')
      .child(propertyRef.key)

    await propertyRef
      .update({
        userId,
        timestamp: {
          '.sv': 'timestamp'
        },
        ...property
      })
    await propertyRefRef
      .set(true)
    const key = propertyRef.key
    return key
  }
}

检查后,我看到该应用程序有一个“ sources”文件夹,其中存在一个properties.js

import _ from 'underscore'
import {Observable} from 'rxjs'
export default function (rxfb) {
  return {
    getProperty (propertyId) {
      return rxfb.database
        .ref('properties')
        .child(propertyId)
        .getValue()
        .onValue()
        .map(property => ({propertyId, ...property}))
    },
    getProperties () {
      return rxfb.sources.user.getUser()
        .switchMap(({properties}) =>
          properties
            ? Observable.combineLatest(_(properties).map((property, propertyId) =>
              this.getProperty(propertyId).map(property => ({propertyId, ...property}))))
            : Observable.from([{}]))
    }
  }
}

在actions / properties / create.js中,我尝试添加一些代码行以读取属性计数并将其添加到名称中:

if (!property.displayName) {
      var userProperties = myProperties(rxfb).getProperties().count()
      property.displayName = 'Property #' + (userProperties + 1)
    }

添加这些行之后,代码如下:

import myProperties from '../../sources/properties'

export default function (rxfb) {
  return async function (property) {
    const userId = (await rxfb.sources.user.getAuth().take(1).toPromise()).uid
    const propertyRef = rxfb
      .database
      .ref('properties')
      .push()
    const propertyRefRef = rxfb
      .database
      .ref('users')
      .child(userId)
      .child('properties')
      .child(propertyRef.key)


    if (!property.displayName) {
      var userProperties = myProperties(rxfb).getProperties().count()
      property.displayName = 'Property #' + (userProperties + 1)
    }

    await propertyRef
      .update({
        userId,
        timestamp: {
          '.sv': 'timestamp'
        },
        ...property
      })
    await propertyRefRef
      .set(true)
    const key = propertyRef.key
    return key
  }
}

但是似乎我得到的属性计数不正确,我做错了什么?

0 个答案:

没有答案