如何解析路由中的angularfire2数据?

时间:2018-12-12 13:58:28

标签: angular angularfire2 angular-resolver

尝试解析路由器中来自angularfire2的某些数据。当我通过return of('Hello Alligator!')传递组件时,我的组件日志Hello Alligator,但是当我尝试从angularfire服务解析数据时,它只是挂起而从未解析。我还想将其设置为仍可以添加到集合中的位置。我在做什么错了?

//SmsListResolverService    

import {Resolve, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router'
import {Observable, of} from 'rxjs'
import { SMS } from './SMS.interface';
import {FirebaseService} from '../_shared/firebase.service'
import { Injectable } from '@angular/core';

import { AngularFirestore } from '@angular/fire/firestore';

@Injectable()
export class SmsListResolverService implements Resolve<Observable<any>>{
    constructor(private db:AngularFirestore){

    }
    resolve(){
        // this_works-----> return of('Hello Alligator!') 
        return this.db.collection('messages').valueChanges() //not this

    }
}


//Route module 
export const routes: Routes = [
  {
    path: 'chat',
    component: SmsComponent,
    resolve: { messages: SmsListResolverService }
 }
];

//component

export class SmsComponent{ 
  constructor(public sms: SmsService, private route:ActivatedRoute) {

    console.log(this.route.snapshot.data)
  }

1 个答案:

答案 0 :(得分:0)

像哈维尔一样,您需要订阅您的valueChanges:

def main(file_path):
    with open(file_path, 'rb') as pdf_file:
        pdf_buffer = StringIO(pdf_file.read())

    try:
        input_pdf = pyPdf.PdfFileReader(pdf_buffer)
    except:
        input_pdf = pyPdf.PdfFileReader(decompress_pdf(pdf_buffer))

    no_of_pages = input_pdf.getNumPages()

    headers = []
    row_list = []
    text = []
    count = 0

    for i in range(no_of_pages):
        writer = pyPdf.PdfFileWriter()
        page = input_pdf.getPage(i)
        writer.addPage(page)
        file_name = '%s\\%s.pdf' % (os.getcwd(), count)
        newFile = open(file_name,'wb')
        writer.write(newFile)
        newFile.close()
        count += 1

        try:
            process = subprocess.call(['pdftotext', '-layout', file_name])
        except:
            print 'fail'

        name_text = re.sub('.pdf$','.txt',file_name)
        with open(name_text) as f:
            for line in f:
                line = line.decode('ascii','ignore').replace('\n','').replace(',','').replace(';','').strip()
                if line != '':
                    text.append(line)
        os.remove(name_text)
        os.remove(file_name)


        details_start = ''
        details_end = ''
        details_dict = {}

        attribute_start = ''

        details_bool = True
        attributes_bool = False

        for x,y in enumerate(text):
            if 'DATABASE' in y:
                details_start = int(x +1)
            if 'PostingBody' in y:
                details_end = int(x)
                #print details_end
            if 'Attributes' in y:
                attribute_start = int(x)
                attributes_bool = True

        renewal_dates = []

        for x in range(details_start, details_end):
            if 'posting_renewal_dates' in text[x]:
                n = 0
                #print text[x].split(':')[1].strip()
                if text[x].split(':')[1].strip() != 'n/a':
                    testbool = True
                    while testbool:
                        if not 'record_modified:' in text[x+n]:
                            if 'posting_renewal_dates:' in text[x+n]:
                                renewal_dates.append( text[x+n].split(': ')[1] )
                            else:
                                renewal_dates.append( text[x+n] )
                            n += 1
                        else:
                            testbool = False
            elif not text[x][0].isupper():
                #print text[x]
                key = text[x].split(':')[0]
                value = text[x].split(':')[1]



            if key != '':
                details_dict[key] = value

        try:
            xObject = page['/Resources']['/XObject'].getObject()
            for obj in xObject:
                if xObject[obj]['/Subtype'] == '/Image':
                    size = (xObject[obj]['/Width'], xObject[obj]['/Height'])
                    data = xObject[obj].getData()

                    mode = "RGB"
                    try:
                        if not os.path.exists('%s/%s' % (new_folder, details_dict['posting_id'])):
                            os.mkdir('%s/%s' % (new_folder, details_dict['posting_id'].strip(' ')))
                            img_dir = '%s/%s' % (new_folder, details_dict['posting_id'].strip(' '))
                            print 'Success -- ' + img_dir
                        else:
                            print "Directory already exists"
                    except:
                        print 'Directory %s already exists' % details_dict['posting_id']
                    #print xObject[obj]['/Filter']
                    #print xObject[obj]['/ColorSpace']
                    if xObject[obj]['/Filter'] == '/FlateDecode':
                        img = Image.frombytes(mode, size, data)
                        img.save(img_dir + '\\' + obj[1:] + ".jpg")
                    elif xObject[obj]['/Filter'] == '/DCTDecode':
                        img = open(obj[1:] + ".jpg", "wb")
                        img.write(data)
                        img.close()
                    elif xObject[obj]['/Filter'] == '/JPXDecode':
                        img = open(obj[1:] + ".jp2", "wb")
                        img.write(data)
                        img.close()
        except:
            print 'No images found for %s' % details_dict['posting_id']


        body = ''
        if attributes_bool:
            for x in range(details_end+2, attribute_start):
                body += text[x] + ' '
        else:
            for x in range(details_end+2, len(text)-1):
                body += text[x] + ' '

        attributes_dict = {}
        if attributes_bool:
            for x in range(attribute_start+2, len(text)-1):
                try:
                    key = text[x].split(':')[0]
                    value = text[x].split(':')[1]
                except:
                    pass

            attributes_dict[key] = value

        row = []

        for x in details_dict:
            if not x in headers:
                headers.append(x)
            row.append(details_dict[x])

        if not 'body' in headers:
            headers.append('body')
        row.append(body)

        row_list.append(row)

    with open(filename, 'wb') as f:
        csvwriter = csv.writer(f)
        csvwriter.writerow(headers)
        for x in row_list:
            csvwriter.writerow(x)