【问题标题】:properly declare local function angular2 + typescript正确声明局部函数 angular2 + typescript
【发布时间】:2017-03-26 07:10:21
【问题描述】:

我正在将 angular 1 转换为 angular 2(离子 2),我创建了这个提供程序来替换服务,但我在本地函数中遇到了错误。

如何使用 angular2 和 Typescript 声明本地函数?

import { Injectable } from '@angular/core';


@Injectable()
export class PouchSeed {

    constructor() { }

    function normalizeDoc(doc, id) {
        function normalize(doc) {
            doc = angular.copy(doc);
            Object.keys(doc).forEach(function (prop) {
                var type = typeof doc[prop];
                if (type === 'object') {
                    doc[prop] = normalize(doc[prop]);
                } else if (type === 'function') {
                    doc[prop] = doc[prop].toString();
                }
            });
            return doc;
        }

        var output = normalize(doc);
        output._id = id || doc._id;
        output._rev = doc._rev;
        return output;
    }
    ....
    seed(db, designDocs, callback) {
        if (!db || !designDocs) {
            throw new TypeError('`db` and `design` are required');
        }

        var local = objMapValues(objMapKeys(designDocs, addDesign), normalizeDoc);

        var seedPromise = db.allDocs({include_docs: true, keys: Object.keys(local)})

                .then(function (docs) {

                    var remote = {};

                    docs.rows.forEach(function (doc) {
                        if (doc.doc) {
                            remote[doc.key] = doc.doc;
                        }
                    });

                    var update = Object.keys(local).filter(function (key) {
                        if (!remote[key])
                            return true;
                        local[key]._rev = remote[key]._rev;
                        return !docEqual(local[key], remote[key]);
                    }).map(function (key) {
                        return local[key];
                    });

                    if (update.length > 0) {
                        return db.bulkDocs({docs: update});
                    } else {
                        return Promise.resolve(false);
                    }
                })
                .then(function (result) {
                    if (typeof callback === 'function') {
                        callback(null, result);
                    }
                    return Promise.resolve(result);
                })
                .catch(function (err) {
                    if (typeof callback === 'function') {
                        callback(err, null);
                    }
                    console.log(err);
                    return Promise.reject(err);
                });

        return seedPromise;

    };



}

错误:

Typescript Error
Unexpected token. A constructor, method, accessor, or property was expected.
src/providers/pouch-seed.ts
    function normalizeDoc(doc, id) {
        function normalize(doc) {

【问题讨论】:

  • 你不能在 TypeScript 的类中放置 "local function"。正如错误所说,您只能将构造函数、方法、访问器或属性放在一个类中。见the docs
  • 如果seednormalizeDoc 在同一级别,为什么不从normalizeDoc 中删除函数?
  • 我是 angular2 的新手,我还不懂类! @echonax 确实,我猜它们处于同一水平,所以我删除了“函数”的出现,现在我有另一个错误Typescript Error ';' expected. src/providers/pouch-seed.ts normalizeDoc(doc, id) { normalize(doc) {
  • 这样嵌套方法可以吗?我应该添加“;”什么地方?

标签: angular ionic2 pouchdb


【解决方案1】:

从您使用 normalizeDoc 方法的方式来看,它不需要是嵌套函数。因此,您可以将班级更改为:

@Injectable()
export class PouchSeed {

    constructor() { }

    normalizeDoc(doc, id) {

        var output = this.normalize(doc);   // <-- note how you call your normalize method
        output._id = id || doc._id;
        output._rev = doc._rev;
        return output;
    }

    normalize(doc) {
      doc = angular.copy(doc);
      Object.keys(doc).forEach(function (prop) {
        var type = typeof doc[prop];
        if (type === 'object') {
          doc[prop] = normalize(doc[prop]);
        } else if (type === 'function') {
          doc[prop] = doc[prop].toString();
        }
      });
      return doc;
    }
    ....

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多