Как получить мета-значение в Angular2

#angular #angular-cli

#angular #angular-cli

Вопрос:

Как я могу получить мета-значение из заголовка HTML в Angular2?

Например, у меня есть HMTL моего проекта, и я хотел бы получить мета-имя «userId».

  <!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title>SampleProject</title>
    <base href="/">
    <meta name="userId" value="12345">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>

<body>
    <app-root>Loading...</app-root>
</body>

</html>
  

Ответ №1:

 document.querySelector('meta["userId"]').getAttribute('value')
  

В Angular2 для этого нет специальной поддержки.

Если вы пытаетесь избежать прямого доступа к DOM, вы можете прочитать это перед запуском Angular2 и передать его Angular с помощью DI.

 var userId =     document.querySelector('meta["userId"]').getAttribute('value');

// @Injectable(),  @Component(), or @Directive()
class ServiceOrComponent {
  constructor(@Inject('userId') private userId:string) {}
}

@NgModule({
  providers: [{provide: 'userId', useValue: userId]}
  ....
})
export class AppModule() 
  

Вместо 'userId' строки вы также можете использовать OpaqueToken

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

1. Спасибо @GunterZochbauer . document.querySelector... Должно быть document.querySelector('meta[name="userId"]').getAttribute('value') . Я проверю OpaqueToken

2. AFAIK внутренние кавычки не нужны, если в них нет пробелов, а значение не начинается с числа (возможно, и с других символов). В любом случае спасибо за отзыв. Я обновил ответ.