私はURLから来るIDを取得するコンストラクタを持っています。それから私はngInitでこれを持っている:angular2はobservable subscribe内のオブジェクトを設定できません
ngOnInit() {
this.as.getPostById(this.postId).subscribe(
(post) => {
this.thepost = post;
console.log(this.thepost);
this.meta['title'] = 'title of the post';
this.meta['metaTitle'] = 'meta tag title';
this.meta['metaDesc'] = 'dynamic description for post';
this.meta['metaKeywords'] = 'dynamic,keywords,post';
this.meta['ogTitle'] = 'post title';
this.meta['ogDesc'] = 'dynamic description to share post';
this.meta['ogImg'] = '/assets/images/postimage.jpg';
this.meta['ogUrl'] = '/post/idpost';
}
);
//console.log(this.thepost);
// this.meta['title'] = 'title of the post';
// this.meta['metaTitle'] = 'meta tag title';
// this.meta['metaDesc'] = 'dynamic description for post';
// this.meta['metaKeywords'] = 'dynamic,keywords,post';
// this.meta['ogTitle'] = 'post title';
// this.meta['ogDesc'] = 'dynamic description to share post';
// this.meta['ogImg'] = '/assets/images/postimage.jpg';
// this.meta['ogUrl'] = '/post/idpost';
}
私はそれが動作しない購読内部メタオブジェクトを設定している場合。メタタグの外側は変化します。これはこれで終わりです。私はサブスクリプション内でそれを設定し、私はテンプレートでそれを使用することができますが、私がサブスクリプションの外にログオンすると、それは未定義です。
ここでは何が欠けていますか?
は私が現時点で私が持っている全体のコードを追加してみましょう。
import { Component, OnInit,OnDestroy,AfterViewInit,Renderer } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { Subscription } from 'rxjs/RX';
import {AppService} from '../services/app.service';
import { MetaSetterService } from '../services/meta-setter.service';
@Component({
selector: 'app-post',
templateUrl: './post.component.html',
styleUrls: ['./post.component.css']
})
export class PostComponent implements OnInit,OnDestroy,AfterViewInit {
subscription: Subscription;
postId:String;
thepost;
meta:Object = {};
post;
postTitle:String;
constructor(
private router: Router,
private activeR: ActivatedRoute,
private as:AppService,
private metaSetter:MetaSetterService,
public renderer:Renderer
) {
this.subscription = this.activeR.params.subscribe(
(param:any) => {
this.postId = param['id'];
}
)
}
ngOnInit() {
this.as.getPostById(this.postId).subscribe(
(post) => {
this.thepost = post;
console.log(this.thepost);
this.postTitle = post.title;
this.meta['title'] = 'title of the post';
this.meta['metaTitle'] = 'meta tag title';
this.meta['metaDesc'] = 'dynamic description for post';
this.meta['metaKeywords'] = 'dynamic,keywords,post';
this.meta['ogTitle'] = 'post title';
this.meta['ogDesc'] = 'dynamic description to share post';
this.meta['ogImg'] = '/assets/images/postimage.jpg';
this.meta['ogUrl'] = '/post/idpost';
}
);
//console.log(this.thepost);
// this.meta['title'] = 'title of the post';
// this.meta['metaTitle'] = 'meta tag title';
// this.meta['metaDesc'] = 'dynamic description for post';
// this.meta['metaKeywords'] = 'dynamic,keywords,post';
// this.meta['ogTitle'] = 'post title';
// this.meta['ogDesc'] = 'dynamic description to share post';
// this.meta['ogImg'] = '/assets/images/postimage.jpg';
// this.meta['ogUrl'] = '/post/idpost';
}
ngOnDestroy(){
this.subscription.unsubscribe();
}
ngAfterViewInit():void{
this.metaSetter.setAll(this.renderer,this.meta);
}
}
なぜあなたはそれが購読者の外で定義されることを期待しましたか?コールバックが呼び出されるまでは存在しません。そのため、コールバック*を書くのです。 – jonrsharpe