Angular 4.0で追加された新しい組み込みサービス、Meta
について解説します。
Meta
サービス
Meta
サービスは、その名のとおり、HTMLの<meta>
タグに対する操作を行うためのサービスです。 @angular/platform-browser
パッケージから提供されていて、2.0ですでに実装されているTitle
サービスと同じように使用できます。
import { Meta } from '@angular/platform-browser';
@Injectable()
export class MyService {
constructor(metaService: Meta) {}
}
getTag(attrSelector: string): HTMLMetaElement
getTag
メソッドは、引数のattrSelector
に該当するmetaタグ要素を取得するものです。 attrSelector
は通常のCSSセレクタではなく、属性をベースにした文字列です。 たとえばproperty
がfb:app_id
のmetaタグを取得したい場合は次のように呼び出します。
const tag = metaService.getTag('property=fb:app_id');
同じ引数で、複数件の戻り値を返せるgetTags
もあります。
const tags = metaService.getTags('name=author');
addTag(tag: MetaDefinition, forceCreation: boolean = false): HTMLMetaElement
addTag
メソッドは新しくmetaタグをheadに追加するためのものです。 引数はMetaDefinition
型のオブジェクトと、すでに同じmetaタグが存在するときに上書きするかどうかのフラグです。 戻り値には新しく生成された、あるいはすでに存在していたmetaタグ要素が渡されます。
MetaDefinition
インターフェースは次のような定義になっています。
export type MetaDefinition = {
charset?: string;
content?: string;
httpEquiv?: string;
id?: string;
itemprop?: string;
name?: string;
property?: string;
scheme?: string;
url?: string;
}
実際の使い方は次のようになります。
metaService.addTag({name: 'author', content: 'page author'});
こちらも同時に複数件を処理するaddTags
メソッドが用意されています。
metaService.addTags([
{name: 'twitter:title', content: 'Content Title'},
{property: 'og:title', content: 'Content Title'}
]);
updateTag(tag: MetaDefinition, selector?: string): HTMLMetaElement
updateTag
メソッドはすでに存在するmetaタグを更新するためのものです。 第2引数にセレクタが渡されなければ、第1引数のname
やproperty
をもとに更新対象を自動で判別します。 また、対象が存在しなければmetaタグの追加を行います。
removeTag(attrSelector: string): void
removeTag
メソッドはセレクタにヒットしたmetaタグを除去します。
removeTagElement(meta: HTMLMetaElement): void
こちらは、セレクタではなくmetaタグ要素を受け取り、その要素をDOM上から除去します。
まとめ
これまでSNSへのシェアなどのためにmetaタグを操作する必要があったときは、直接DOMを操作する必要がありました。 ただブラウザ上で動かすだけなら問題ないですが、Angularはクロスプラットフォームに動作できることが目標なので、これは避けるべきものでした。
今回導入されたMeta
はAngular内部で統合されているので、 将来的にはUniversalによるサーバーサイドレンダリング時にも使えて、SEOのためのmetaタグ操作も可能になるよう設計されています。 ぜひ独自のサービスから組み込みのMeta
に乗り換えておきたいところです。 ただし、このAPIはまだexperimentalなので、半年後の次期メジャーアップデート(5.0)の時には多少の破壊的変更が入るかもしれないことに留意しましょう。
Meta
についてもっと知りたい方はソースコードや、 テストコードを 読むとよいでしょう。
Angular 4.0 Features