我的项目中有重复的代码。
我将它与其他组件分开,以便在更改某些值时更轻松,更动态。不幸的是,它不能与我合作。
这是我拥有的
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);
答案 0 :(得分:0)
现在你需要初始化你的表单对象。
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。
以下是关于它的完整Doc。
仅在根应用程序模块AppModule中调用。调用 它在任何其他模块中,特别是在延迟加载的模块中,是 与意图相反,可能会产生运行时错误。
记得导入结果;不要将它添加到任何其他@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 { }