Angular - заполненный сервисный объект возвращает ноль - PullRequest
0 голосов
/ 29 декабря 2018

Я использую Angular 5 и ionic 3, я пытаюсь заполнить объект после конечной точки ответа, например:

user.service.ts

public UserInfo: UserData = {
    id: null,
    username: null,
    email: null,
    subscribeData: null,
    brand: null,
    fiscalcode: null,
};

populateBaseUserInfo(user) {
    this.UserInfo.id = user._id;
    this.UserInfo.username = user.username;
    this.UserInfo.subscribeData = user.subscribeData;
    this.UserInfo.email = user.email;
    console.log(JSON.stringify(this.UserInfo));
} 

Ответ в console.log в порядке:

the response in console.log is ok

, но когда я пытаюсь взять объект в компоненте, объект возвращает все поля какnull ...

user.component.ts

import { UserService } from '../../service/user.service';
@Component({
 providers: [UserService]
})
export class MainPage {
   public localUser: UserData;

   constructor(private UserService : UserService, ) {
       this.localUser = this.UserService.UserInfo;
   }
)

user.html

{{localUser | json}}

enter image description here

Итак, что я делаю не так?Что нужно сделать, чтобы увидеть объект json в компоненте таким же, как в ответе?

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Я решил, что основная проблема заключалась в том, что «userInfo» не был распознан как одиночный, из-за версии angular (5), я не могу использовать параметр providein:root в инъекционном сервисе, так что эточто я сделал:

-добавил провайдера службы в app.module и удалил из компонента

-использую Behaviorsubject rxjs как внутри service :

import { BehaviorSubject } from 'rxjs/BehaviorSubject';
  public UserInfo = new BehaviorSubject<any>({
    _id : null,
    username : null,
    email : null,
    data : null,
    brand : null,
    fiscalcode : null
});
user = this.UserInfo.asObservable();

populateBaseUserInfo(user : any){
    this.UserInfo.next(user)
    console.log(JSON.stringify(this.UserInfo));
}; 

здесь компонент кода, где я вызываю "populateBaseUserinfo"

this.UtentiService.populateBaseUserInfo( this.risposta );

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

   this.UtentiService.user.subscribe(user =>{
    this.localUser = user;
   })
0 голосов
/ 29 декабря 2018

Я думаю, что проблема в том, что, поскольку вы просто изменяете свойства своего объекта, вы не запускаете обнаружение изменений, я уверен, что все будет работать, если вместо возврата ссылки ваш сервисный метод вернет копию этого объекта(например, сделайте UserInfo геттером, который возвращает клон lodash этого объекта), обратите внимание, что это неправильное решение, даже если оно решит вашу проблему.Было бы лучше, если бы каждый раз, когда вы вызывали populateBasicUserInfo, вы просто создавали новый объект с нужной информацией, а не просто заменяли свойство.Таким образом, как я уже говорил, поскольку вы меняете ссылку, он запускает обнаружение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...