typescript 将类导入angular2中的另一个类组件

sy5wg1nm  于 2022-12-14  发布在  TypeScript
关注(0)|答案(1)|浏览(120)

我的项目中有重复的代码。
我把它从其他组件中分离出来,使它在改变一些值时更容易和动态。不幸的是,它不适合我。
这是我的资料
Repeated Code: form.ts

export class Form {
    constructor(){
        var today = new Date(),
            dd = today.getDate(),
            mm = today.getMonth() + 1,
            yyyy = today.getFullYear();

        if(dd < 10) dd = `0${dd}`;
        if(mm < 10) mm = `0${mm}`;

        today = `${yyyy}-${mm}-${dd}`;

        this.balance.dateTo = today;
    }

    public balance = {
        viewBy: 'Ad1',
        companyUnit: 'DEPED',
        financialYear: '2016',
        clients: 'Dummy Text 1'
    };
}

在其他组件中,如余额、结算等...
我把它放在上面。
以下是我尝试过的方法:

import { Form } from '../form';   // path is correct

export class BalanceComponent {
    form: Form;                   // I am not sure of it
                                  // this is the place I want to import repeated class
    search_data(balance){
        console.log(balance);
    }
}

systemjs.config.js

(function (global) {
  System.config({
    paths: {
      // paths serve as alias
      'npm:': 'node_modules/'
    },
    // map tells the System loader where to look for things
    map: {
      // our app is within the app folder
      app: 'app',
      // angular bundles
      '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
      '@angular/common': 'npm:@angular/common/bundles/common.umd.js',
      '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
      '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
      '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
      '@angular/http': 'npm:@angular/http/bundles/http.umd.js',
      '@angular/router': 'npm:@angular/router/bundles/router.umd.js',
      '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
      'ng2-pagination': 'npm:/ng2-pagination',
      // other libraries
      'rxjs':                      'npm:rxjs',
      'angular-in-memory-web-api': 'npm:angular-in-memory-web-api',
    },

    // packages tells the System loader how to load when no filename and/or no extension
    packages: {
      app: {
        main: './main.js',
        defaultExtension: 'js'
      },
      rxjs: {
        defaultExtension: 'js'
      },
      'angular-in-memory-web-api': {
        main: './index.js',
        defaultExtension: 'js'
      },
      'ng2-pagination': {
        main: 'index.js', defaultExtension: 'js' 
      } 
    }
  });
})(this);
f87krz0w

f87krz0w1#

现在需要初始化窗体对象。

export class BalanceComponent {
    form: Form;

    constructor() {
        this.form = new Form();
    }
}

如果要在组件之间共享此值,最好的方法是创建服务,然后将其注入组件。

export class BalanceComponent {    
    constructor(private formService:FormService) {}
}

如果你在构造函数中输入private formService:FormService,你以后就可以像this.formService一样访问这个变量。

@Injectable()
export class FormService {
    constructor(){
        var today = new Date(),
            dd = today.getDate(),
            mm = today.getMonth() + 1,
            yyyy = today.getFullYear();

        if(dd < 10) dd = `0${dd}`;
        if(mm < 10) mm = `0${mm}`;

        today = `${yyyy}-${mm}-${dd}`;

        this.balance.dateTo = today;
    }

    public balance = {
        viewBy: 'Ad1',
        companyUnit: 'DEPED',
        financialYear: '2016',
        clients: 'Dummy Text 1'
    };
}

请记住,如果您的服务在共享模块中,您可能会得到它的多个示例,那么最好的办法是使用Module.forRoot配置模块。
按照约定,forRoot静态方法同时提供和配置服务,它接受一个服务配置对象并返回一个ModuleWithProviders。
这里是完整的医生关于它。
只在根应用程序模块AppModule中呼叫forRoot。在任何其他模块中呼叫它,特别是在延迟载入的模块中,会与目的相反,而且可能会产生执行阶段错误。
记得导入结果;不要将其添加到任何其他@NgModule列表中。

@NgModule({
    imports: [CommonModule],
    declarations: [BalanceComponent],
    exports: [BalanceComponent]
})
export class SharedModule {
    static forRoot(): ModuleWithProviders {
        return {
            ngModule: SharedModule,
            providers: [FormService]
        };
    }
}

然后导入模块如下所示:

@NgModule({
  imports: [
    /** other modules import **/
    SharedModule.forRoot(), // you can also pass some config here if needed
    routing
  ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

相关问题