2016-06-28 12 views
0

アプリケーションを実行すると、ngOnInitを持つすべてのログがコンソールに表示されますが、アプリケーションはコンポーネントの変数とl18nのテキストを表示せずにスケルトンビューのみを生成します。 ngOnInitまたはそれが必要なので動作しません。なぜなら、私はコンストラクタで呼び出されなければならないからです。テンプレート内のAngular2初期変数。

これらの問題は、コンポーネントへのリンクを2回目にクリックしたときに消えてしまい、すべてのものが読み込まれたときに消えてしまいます。これは、アプリケーション内のすべてのコンポーネントと、angular2スターター・ガルプで構築されるすべてのアプリケーションで発生します。

2回目のクリックだけで、(コンストラクタで呼び出されたときに)ngOnInitを表示および呼び出しする変数がロードされるのはなぜですか?

export class SettingsDevicesComponent implements OnInit { 

**variables** 

@Component({ 
    selector: 'as-settings-devices', 
    templateUrl: 'app/settings-devices/settings-devices.component.html', 
    changeDetection: ChangeDetectionStrategy.OnPush, 
    styleUrls: ['app/settings-devices/settings-devices.component.css'], 
    providers: [Communication], 
    pipes: [TranslatePipe], 
    directives: [REACTIVE_FORM_DIRECTIVES, NgClass, NgStyle, CORE_DIRECTIVES,ROUTER_DIRECTIVES] 
}) 

constructor(private _cm: Communication, 
      private _cdRef: ChangeDetectorRef, 
      private _router: Router, 
      private _sanitizer: DomSanitizationService, 
      @Inject(ElementRef) elementRef: ElementRef 
      ) { 
       this.elementRef = elementRef; 
       this.ngOnInit(); 
       this.fileUpload = new FormGroup({ 
        color: this.color 
       }); 
       this.fileName = new FormGroup({ 
        fileNameInput: this.fileNameInput 
       }); 
       this.settingsName = new FormGroup({ 
        settingsNameInput: this.settingsNameInput 
       }); 
      } 

ngOnInit() { 
    this.getDeviceData(); 
    this.getZoneData(); 
} 
} 
+0

ブラウザコンソールにエラーが発生しましたか。これはタイミングの問題のように聞こえる。 'getDeviceData()'と 'getZoneData()'は何をしていますか?コンストラクタや 'ngOnInit()'からそれらを呼び出すことで大きな違いはありません。 –

+0

コンストラクタから 'ngOnInit()'を呼び出すと、 'this.getDeviceData(); this.getZoneData();'が2回実行されます。コンストラクタから 'ngOnInit()'を呼び出す代わりに、このコードをコンストラクタに依存するのであれば、このコードをコンストラクタに移動する方が良いでしょう。 –

+0

getDeviceData()、getZoneData()はhttpサービス – Emerceen

答えて

1

問題がchangeDetectionた:主成分でChangeDetectionStrategy.OnPush 'app.component.ts' これは問題原因

:すべてを除去した後

@Component({ 
    selector: 'as-main-app', 
    templateUrl: 'app/app.html', 
    changeDetection: ChangeDetectionStrategy.OnPush, 
    directives: [ROUTER_DIRECTIVES] 
}) 

はokです:

@Component({ 
    selector: 'as-main-app', 
    templateUrl: 'app/app.html', 
    directives: [ROUTER_DIRECTIVES] 
}) 
関連する問題