Objects obyekti ob'ektni LocalStorage-dan tayinlanganda, misol usullarini yaratish

Men Java dasturchisiman, lekin men o'yinchini o'ynashga harakat qilyapman.

Mana mening foydalanuvchi obyektim:

export class User
{
    id: string;
    name: string;
    email?: string;
    unit: string;
    street: string;
    postalcode: string;
    paymentmode: string;

    public isComplete(): boolean
    {
        if(this.id != null && this.email != null && this.isAddress()){ return true}
        else return false;
    }

    public isAddress(): boolean
    {
        if(this.street != null && this.postalcode != null){ return true}
        else return false
    }


}

va u erda yana bir tarjimasi ...

var user = new User();
user = this.loginService.getLocalUser();

LocalStorage foydalanuvchi uchun tahlil qilingan deb o'ylayman!

IsComplete usuliga shu tarzda kira olmayapman

user.isComplete()

Buning o'rniga uni statik ob'ekt sifatida ishlatish kerak

User.isComplete

Mening getLocaluser:

getLocalUser(): User {
        var user = new User();
        user = JSON.parse(localStorage.getItem('user'));

        return user;
    }

Bunga qanday erishish mumkin?

Error

13
user = this.loginService.getLocalUser (); sizni boshqa ob'ektga qaytarishi mumkin.
qo'shib qo'ydi muallif Jokester, manba
Bu misol usullari
qo'shib qo'ydi muallif Paul Samsotha, manba
qo'shib qo'ydi muallif Paul Samsotha, manba
Siz yangi misolni yaratdingizmi? var user = yangi foydalanuvchi() kabi? Sizning namunangizdan ushbu qismni qoldirib ketganga o'xshaysiz.
qo'shib qo'ydi muallif Sebastian Sebald, manba
Siz uslubingizni statik qilishni xohlaysizmi?
qo'shib qo'ydi muallif TanguyB, manba
Rahmat @Jokester Men savolimni yangiladim. Iltimos, murojaat qiling va noto'g'ri bo'lsa, menga xabar bering.
qo'shib qo'ydi muallif user7625710, manba

6 javoblar

Buni foydalaning

let user = new User().deserialize(this.loginService.getLocalUser());

Endi User modelingiz ichida serializer() usulini qo'shing

deserialize(input: any): User {
    var self: any = this;
    for (let prop in input) {
            self[prop] = input[prop];
    }
    return self;
}

parse() dan foydalangan holda User ob'ektingizga veb-xizmatingizni chaqirsangiz va uni xaritada aks ettiradigan narsa nima bo'ladi, chunki ular User ob'ektining yangi nusxasini yaratish va nusxalanadigan qiymatni birma-bir javobsiz qoldirib, nima deserialize() funktsiyasiga javob beradi.

5
qo'shib qo'ydi
Buni to'g'ri javob sifatida belgilash kerak
qo'shib qo'ydi muallif Amit, manba

Buni faqat shunday qilish kerak:

var user = new User;

user.isComplete();

After you edit your question, if I understand you correctly, you need to use namespace and Triple-Slash Directives as following: In first file, a.ts for example:

namespace myNameSpace{
    export class User
    {
        id: string;
        name: string;
        email?: string;
        unit: string;
        street: string;
        postalcode: string;
        paymentmode: string;

        public isComplete(): boolean
        {
            if(this.id != null && this.email != null && this.isAddress()){ return true}
            else return false;
        }

        public isAddress(): boolean
        {
            if(this.street != null && this.postalcode != null){ return true}
            else return false
        }
    }
}

Ikkinchi faylda. b.ts , masalan:

/// 
namespace myNameSpace{
    var user = new User();
    //user = this.loginService.getLocalUser(); //this function need to be checked in your environment
    user.isComplete();
}
4
qo'shib qo'ydi
Bu asosiy masalaga qaratilmaydi, ya'ni HTTP so'rovidan ajralib chiqqan JS ob'ekti faqat ob'ektni emas, balki sinf usullarini o'z ichiga olmaydi, foydalanuvchi aniq javob beradigan ob'ektni yaratish kerak .
qo'shib qo'ydi muallif Amit, manba
O'ylaymanki, OXning asosiy muammolari bu savol edi. uning o'rniga mahalliy joy haqida so'rashi kerak edi.
qo'shib qo'ydi muallif Smit, manba
Qachon? Derleme paytida?
qo'shib qo'ydi muallif rafraph, manba
Javobimni yangilayman. Umid qilamanki sizni to'g'ri tushunaman.
qo'shib qo'ydi muallif rafraph, manba
Komplete() funktsiyasi emasligini aytadi
qo'shib qo'ydi muallif user7625710, manba
Yo'q, dasturni ishga tushirsam!
qo'shib qo'ydi muallif user7625710, manba
Men savolimni yangiladim. Agar yordam beradigan bo'lsangiz,
qo'shib qo'ydi muallif user7625710, manba

Faqat localStorage dan olingan ayrıştırılmış JSON ma'lumoti bilan Foydalanuvchining sinfini o'rnating.

getLocalUser usulini quyidagi kabi o'zgartiring:

getLocalUser(): User {
    let userData = JSON.parse(localStorage.getItem('user'));
    let user = new User(userData);

    return user;
}

Endi siz yangi misolga ega bo'lganingizda, odatda sinfning belgilangan namuna usullarini ishlatishingiz mumkin:

let user = this.loginService.getLocalUser();
let isComplete = user.isComplete();

console.log(isComplete);//=> true/false

Bundan tashqari, konstruktorni User sinfiga qo'yish uchun javob berilmagan.

export class User
{
    id: string;
    name: string;
   //...

    constructor(userData: any) {
        this.id = userData.id;
        this.name = userData.name;
       //...
    }

    public isComplete(): boolean
    {
        if(this.id != null && this.email != null && this.isAddress()){ return true}
        else return false;
    }

   //the rest of the methods...

}
3
qo'shib qo'ydi

The error originates from here JSON.parse(localStorage.getItem('user'));

Bu so'zdan qaytgan ob'ekt User turidagi ob'ekt emas, shuning uchun isComplete a'zo uslubi yo'q.

@ rattlehand echimi siz uchun etarli bo'lishi kerak. Lekin kod shu tarzda dinamikaga aylandi.

Biroq, bu yechimni to'liq yozib qo'yishni ma'qul ko'raman, chunki u TSdan foydalanishning muhim maqsadidir.

export interface User
{
    id: string;
    name?: string;
    ...
}

function isComplete(user: User) { 
    if (user.id != null && user.email != null ) { 
        return true;
    }
    return false;
}

function getLocalUser(): User {
    var user = JSON.parse(localStorage.getItem('user')) as User;
    return user;
}

var user = getLocalUser();
console.log(isComplete(user));//true or false

Modeldagi sinf o'rniga interfeysdan foydalanish kelgusida Java-dan g'alati bo'lishi mumkin. U eng ko'p ishlatiladigan ramkalarga moslangan, masalan, vagonlarda yozilgan, masalan. Burchaklar, RxJs. Xuddi shu narsa "DefinitelyTyped" ning ta'riflari uchun ham amal qiladi. Albatta, sinf yaxshi yechim bo'lsa, albatta. Men siz uchun joyni tark etaman.

Odatda, localStorage ni yaratish uchun yana bir bor borishingiz mumkin.

export class LocalStorageService {
    private storage = localStorage;

    get(key: string): T {
        var serialized: string = this.storage.getItem(key);
        return serialized ? JSON.parse(serialized) : undefined;
    }

    set(key: string, data: T) {
        var serialized: string = JSON.stringify(data);
        this.storage.setItem(key, serialized);
    }

    remove(key: string) {
        this.storage.removeItem(key);
    }
}
3
qo'shib qo'ydi

Qanday shunchaki:

getLocalUser(): User {
    return Object.assign(new User(), JSON.parse(localStorage.getItem('user')));
}

bu erda siz ( MDN: Object.assign (keyin, ) :

Bir yoki bir nechta manba obyektlaridan maqsad obyektga barcha o'z raqamlarini o'z qiymatlarini nusxalash.

va

Nishon ob'ektni qaytaradi.

Ya'ni, yangi yaratilgan misol bilan User barcha ajralmas qismlari ayrıştırılmış JSON bilan yakunlanadi.

1
qo'shib qo'ydi

Buni ko'ring

var user = (this.loginService.getLocalUser());
0
qo'shib qo'ydi
Angular Uzbekistan
Angular Uzbekistan
107 ishtirokchilar

Guruh Angular bo'yicha muloqot qilish uchun ochilgan Sizni qiziqtirsa: @nodejs_uz @react_uz @angular_uz @yiiframework_uz @js_uzb @typescript_uzb @vuejs_uz @ngTashkent @laravel_uz @uzdevgroup Ish o'rinlari @UzDev_jobs

ngTashkent
ngTashkent
77 ishtirokchilar

Правила просты: 1. Не хамить 2. Не хейтить 3. Реакт не нужен Ссылки: https://t.me/angular_ru - старший брат https://t.me/angular_uz - ангулар на узбекском @js_uzb @vuejs_uz @react_uz @nodejs_uz @yiiframework_uz @uzdevgroup @UzDev_Jobs @tasdev_talks