我的應用程序是這樣的:如何使用angular2共享組件?
- 一些基本的組件(家庭,登錄,大約...)在我的主 app.module
- 一些其他模塊的應用程序的每個部分
我有一個組件,ToastComponent,我可能需要到處使用。 我工作正常的基本組件,但不包括在模塊中包含的那些。
我讀到有關如何共享服務,但是,(我一直不明白我在angular2承認),我仍然無法弄清楚如何使它工作在我的情況下,許多網頁。 (我甚至嘗試過sharedmodule,但它更糟糕)
我遇到的問題是給setMessage(見代碼結尾)的消息顯示在控制檯,但不是在屏幕上!?!
希望有人可以點我在正確的方式來編寫的。 TIA
JP
這裏是代碼後,我恢復到一個已知的階段(許多嘗試後)...
的ToastComponent:
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-toast',
templateUrl: './toast.component.html',
styleUrls: ['./toast.component.css']
})
export class ToastComponent {
@Input() message = { body: '', type: '' };
setMessage(body, type, time = 5000) {
this.message.body = body;
this.message.type = type;
console.log('ToastComponent %o' , this.message);
setTimeout(() => { this.message.body = ''; }, time);
}
}
app.module
import { ToastComponent } from './_shared/toast.component';
...
import { LivresModule } from './livres/livres.module'; // where toast will be used
import { ExampleComponent } from './example.component'; // where toast is working fine
...
@NgModule({
imports: [ ... , LivresModule ],
providers: [ ToastComponent, ... ],
declarations: [ AppComponent, ToastComponent, ... ]
exports: [ ToastComponent ],
schemas: [ CUSTOM_ELEMENTS_SCHEMA ],
bootstrap: [ AppComponent ],
})
...
livres.module.ts
...
import { ToastComponent } from '../_shared/toast.component';
import { AuteursComponent } from './auteurs.component'; // where to use toast effectively
...
@NgModule({
...
providers: [ ToastComponent, ... ]
declarations: [
// ToastComponent, // error as declared twice with app.module : OK so commented
...
auteurs.component
...
import { ToastComponent } from '../_shared/toast.component';
...
constructor(private http: Http, private authorService: AuthorService,
private toast: ToastComponent) { }
...
addAuthor() {
...
this.toast.setMessage('Auteur ajouté', 'success');
}
auteurs.component.html
...<app-toast [message]="toast.message"></app-toast>...
auteurs.component。*是app.module的組成部分工作正常的副本。
最新資訊: 我再造一個光的應用程序,模仿一個我建設,我有一個模塊在此錯誤頁:
Unhandled Promise rejection: Template parse errors:
Can't bind to 'message' since it isn't a known property of 'app-toast'.
1. If 'app-toast' is an Angular component and it has 'message' input, then verify that it is part of this module.
2. If 'app-toast' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schemas' of this component to suppress this message.
("<app-toast [ERROR ->][message]="toast.message"></app-toast>
<p> page2 works! </p>
<button (click)="displayMsg()"> Click !"): [email protected]:11
這就是爲什麼我說「模式:[CUSTOM_ELEMENTS_SCHEMA]「(我忘記了這一點),但實際上它在編譯時隱藏了我在運行時遇到的錯誤!
轉換爲服務不會帶來HTML代碼和CSS它。
你談論你得到的錯誤,但沒有包含在你的問題。 Plesse添加確切的錯誤消息。 –
完全沒有錯誤:只有在使用setMessage時屏幕上才顯示的消息。 – JPMous
您需要將您的Toast代碼設置爲服務。在這裏看到更好的實現:https://github.com/johnpapa/event-view –