2017-07-26 4 views
0

私のアプリの各ページにタイトルタグを設定しようとしています。 私はサービスとして設定することができますが、いくつかの例を追ってきましたが、期待どおりに動作していません。Imprlementing Angular 2 services

title.service.ts:

import { Injectable } from '@angular/core'; 
import { TitleService } from '../../../services/title.service'; 

@Injectable() 
export class { 


    constructor() { 
    }; 


    appName = "My App"; 

    public setTitle(newTitle: string) { 
     console.log("!!!"); 
     this.setTitle(this.appName + " - " + newTitle); 
    } 
} 

login.component.ts: '!MyAppを - ログイン' を代わりに取得する

import { Component, OnInit } from '@angular/core'; 
import { Title } from '@angular/platform-browser'; 

export class BaseLoginComponent implements OnInit { 
    constructor(
     private titleService: TitleService 
     ) { 
    } 

    this.titleService.setTitle('Login!'); 

私は単純に「ログイン!

奇妙なことに、私はタイトルを設定できます。サービスをバイパスしています。

setTitle()は決して呼び出されません。

さらに、title.serviceがロードされているかどうかを確認したいので、console.log( "loaded ..?");を挿入しようとしました。。その行には大抵の場合、セミコロンが必要です。

+0

のsetTitle機能でその無限再帰ですか? –

+0

コードが更新されました。とにかくapp.componentのそのコードは不要と思われるので削除しました。 – DaveC426913

+1

@ DaveC426913あなたはコードにクラス名を含めていません。 Angularのデフォルトのタイトルサービスを無効にしていますか? – echonax

答えて

0

[OK]をクリックすると、どこが狂っているのかがわかります。 既存の setTitleサービスがあります。私は自分自身を作る必要はありません。

それは文字通りのように簡単です:

app.module.ts:

import { BrowserModule, Title } from '@angular/platform-browser'; 

@NgModule({ 
    providers[ 
     Title 
    ] 
}) 

login.component.ts:

import { Title }  from '@angular/platform-browser'; 

constructor(private title: Title){} 

this.title.setTitle('MyApp - Login');