Angular4: привязка данных работает только перед инициализацией

У меня есть простой компонент со свойством userFirstName,

Теперь я просто хочу отобразить это свойство. Я сделал простую привязку, и я инициализирую userFirstName в конструкторе, но он работает только тогда, когда есть первая команда!

Так что это работает отлично: и показывает текст "Имя пользователя".

this.userFirstName = "User Name";
this.loggedIn = localStorage.getItem("currentUser")!=null;
var currentUser = localStorage.getItem('currentUser');
let user:User = JSON.parse(currentUser) ;
this.userFirstName = localStorage.getItem('currentUser');

Теперь, если я поставлю this.userFirstName = "User Name"; наконец, это не работает.

Так что это не работает и показывает пустую строку!

   this.loggedIn = localStorage.getItem("currentUser")!=null;
    var currentUser = localStorage.getItem('currentUser');
    let user:User = JSON.parse(currentUser) ;
    this.userFirstName = localStorage.getItem('currentUser');
    this.userFirstName = "User Name";

Вот соответствующий HTML:

<div>
     <a >Hello  {{userFirstName}} ! </a>
//some content
</div>

1 ответ

Поскольку DOM загружается быстрее, он не будет ждать ответа от localStorage, поэтому вы получите эту проблему.

Исправить:

Способ 1: использование *ngIf

<div *ngIf="userFirstName"> ... </div>

Это загрузит DOM, только если в userFirstName есть значение

Способ 2. Выполнение вызовов службы в constructor()

constructor(){
    this.loggedIn = localStorage.getItem("currentUser")!=null;
    var currentUser = localStorage.getItem('currentUser');
    let user:User = JSON.parse(currentUser) ;
    this.userFirstName = localStorage.getItem('currentUser');
}

Метод 3: Инициализация переменной с пустой строкой во время самого объявления.

userFirstName = "";
Другие вопросы по тегам