Установить заголовок после углового обещания

#angular #angular-promise

#угловой #angular-обещание

Вопрос:

Я пытаюсь изучить angular, поэтому я только что закончил учебник по heroes.

Затем я подумал, что хотел бы взглянуть на изменение этого, чтобы я мог изменить заголовок документа на странице. Итак, я следовал инструкциям, чтобы добавить службу заголовка.

Это отлично работает на моей странице панели мониторинга, где я могу просто вызвать службу заголовков при инициализации, поэтому я подумал, что попробую добавить ее на страницу сведений о моем герое, чтобы посмотреть, смогу ли я сделать заголовок документа именем героев:

 import { Component, Input, OnInit } from '@angular/core';
import { Title }                    from '@angular/platform-browser';
import { ActivatedRoute, Params }   from '@angular/router';
import { Location }                 from '@angular/common';

import { Hero }                     from '../classes/hero';
import { HeroService }              from '../services/hero.service';

@Component({
    selector: 'my-hero-details',
    templateUrl: '/app/templates/hero-details.component.template.html'
})

export class HeroDetailsComponent implements OnInit {
    @Input()
    hero: Hero;

    constructor(
        private heroService: HeroService,
        private route: ActivatedRoute,
        private location: Location,
        private titleService: Title
    ) { }

    public ngOnInit(): void {
        this.route.params.forEach((params: Params) => {
            let id =  params['id'];

            this.heroService.getHero(id)
                .then(hero => this.hero = hero)
                .then(function () { this.setTitle(this.hero.name); }); // this is the line I have added
        });
    }

    public save(): void {
        this.heroService.update(this.hero)
            .then(() => this.goBack());
    }

    public delete(): void {
        this.heroService
            .delete(this.hero.id)
            .then(() => this.goBack());
    }

    public goBack(): void { 
        console.log('back')
        this.location.back();
    }

    private setTitle(newTitle: string) {
        this.titleService.setTitle(newTitle);
    }
}
  

Как вы можете видеть из моего кода, я пытаюсь установить заголовок после выполнения обещания для настройки героя. Однако, похоже, ничего не происходит — ошибка не выдается, и заголовок не меняется.

Что я здесь делаю не так? Разве я не связал бы обещание таким образом?

Ответ №1:

Изменить

 .then(function () { this.setTitle(this.hero.name); });
  

Для

 .then(() => { this.setTitle(this.hero.name); }); 
  

чтобы сохранить область this

Смотрите также https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Functions/Arrow_functions

Комментарии:

1. Вау, так просто, когда знаешь! Примет ответ, когда он позволит мне