[Ask Dev] Vineri: Ce ati realizat saptamana asta?

E vechi, vechi, vechi. Iar eu sunt batrana, batrana, batrana! Dar azi promit ca ma ocup de teste si le actualizez continutul. :stuck_out_tongue:

@Cosmin_Popescu , din propria experienta paradigm-ul functional programming ii un mindset, incepi sa te gandesti la probleme din alt punct de vedere ‘out of comfort zone’, cu timpul incepi sa observi ca iti afecteaza si viata persoanala, simplifici lucrurile si vezi mai bine ce ii mai important.
La inceput nu am gasit nimic ce sa imi satisfaca nevoile, un ‘real world example’. Toate tutorialele si video-urile erau mai mult copy/paste.
Daca vrei o bucata din code sa vezi flow-ul, iti voi face un reply.

Domnule Adrian, aveti tot respectul meu deoarece am vazut proiectele dumneavoastra precedente. Doresc sa mergeti, cand ii vreamea calda intrun local frumos si sa comandati o bere rece deoarece eu o voi plati daca ne vom vedea odata. Trebuie sa mai ma nasc odata sa inteleg in totalitatea cercetarea dumneavoastra!
Va multumim!

Nice touch! Nu mam asteptat :laughing:

Mulțumesc mult!
:hot_face:

Eu am apucat sa mai codez ceva saptamana asta #small-win

2 Likes

nicio problema!
:blush:

pare ca s-a rezolvat

Aia nu e cercetare, sunt jucarii :slight_smile: Sa zicem niste jucarii ceva mai serioase.
Doar reproduc niste rezultate obtinute acum ceva ani, de catre altii.

1 Like

Deja am si reusit sa reproduc niste rezultate (structura benzi Cu). Mai am ceva de lucru, aici calculele sunt cu pseudopotential folosind grid uniform, poate o sa implementez grid neuniform si o sa ma gandesc daca nu il fac self-consistent cu DFT ‘full’ in loc de pseudopotential… oricum mai am ceva de lucru si pe partea analitica, am aproximat ceva in cod doar ca sa obtin niste rezultate cat de cat… doar sa gasesc timp si chef.

Am adus un TimePicker open source in proiect si l-am modificat sa poata fi folosit in MaterialFormField iar apoi i-am implementat si o optiune sa poata folosi ca si input/output numarul de secunde in loc de string-uri.

Am fost dezamagit ca Angular Material Components nu are un DateTimePicker ci doar un DatePicker.

1 Like

Si am incheiat saptamana cu un antrenament la sala :slight_smile:

1 Like

Lazy Loading in Angular faci prin Router, adica orice modul care vrei sa se incarce “lazy” trebuie sa aiba o ruta setata in Router Module.
Mare atentie la dependintele (imports) pe care le adaugi intr-un lazy module. Ca regula de baza, un lazy module nu trebuie sa aiba nicio dependinta catre nimic dintr-un alt lazy module, altfel fie nu se va incarca lazy, fie aplicatia va instantia dependintele respective de mai multe ori, separat pentru fiecare modul in parte.

Partea asta am reușit să o acopăr (cred).
Ce nu am reușit încă este să încarc “lazy” un modul în root, în locul celui curent.
Dacă în root avem modulele A și B, între care nu este nicio legătură, vreau că din modulul A să fortez AppModule să încarce modulul B.

Nu prea inteleg ce vrei sa spui.
Root sau AppModule este si el tot un modul, nu este cu nimic diferit fata de un modul custom pe care tu vrei sa il incarci lazy. Ma rog, diferenta este ca root sau AppModule nu poate fi lazy (nici nu are sens sa fie lazy), deoarece este primul modul care se incarca atunci cand porneste aplicatia.

Mai departe, modulele pe care vrei sa le incarci lazy, nu se incarca in root, ci sunt de sine statatoare. Ele se incarca asincron (on-demand) atunci cand navighezi la o ruta care are atasat un lazy module.
In modulele lazy poti importa componente/servicii/etc. definite in AppModule (root) sau in orice alt modul care nu este lazy si este “provided in root”, dar in AppModule (sau orice lazy module) nu poti importa nimic “provided” intr-un lazy module.

Doar in AppModule poti folosi RouterModule.forRoot()
In modulele incarcate nu mai poti folosi sintaxa asa, ci RouterModule.forChild()
Eu vreau sa fac ceva cam asa:
RouterModule.forRoot(lazyModuleA)
Apoi din lazyModuleA sa pot incarca in RouterModule.forRoot(lazyModuleB)

Sau poate ca as putea sa incarc in lazyModuleA modulul lazyModuleB? Doar ca nu stiu daca se mai pastreaza caile.

Corect, RouterModule.forRoot(routes) poate fi folosit o singura data in AppModule.

Apoi, in fiecare lazy module folosesti RouterModule.forChild(lazyModuleRoutes), unde lazyModuleRoutes pot incarca la randul lor module lazy.

app-routing.module.ts:

const routes: Routes = [
    {
        path: 'orders',
        loadChildren: () => import('./orders/orders.module').then(module => module.OrdersModule)
    },
    {
        path: 'customers',
        loadChildren: () => import('./customers/customers.module').then(module => module.CustomersModule)
    },
    {
        path: '',
        redirectTo: '',
        pathMatch: 'full'
    }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

customers-routing.module.ts (customer-detail.module este tot lazy loaded):

const routes: Routes = [
    {
        path: '',
        component: CustomerListComponent,
        children: [
            {
                path: 'detail',
                loadChildren: () => import('./details/customer-detail.module').then(module => module.CustomerDetailModule)
            }
        ]
    }
];

@NgModule({
    imports: [
        RouterModule.forChild(routes)
    ],
    exports: [
        RouterModule
    ]
})
export class CustomersRoutingModule { }

Rutele pe care le-am definit astfel sunt: /customers, /orders si /customers/detail, toate incarcand module lazy.

Si astea sunt requesturile care se fac (o singura data) atunci cand navighez la rutele respective:

Ce vreau eu sa fac este ca la momentul încărcării aplicatiei sa se verifice daca exista un anumit cookie in browser-ul utilizatorului.
Daca nu exista, se încarcă PublicModule.
Daca exista, se încarcă AuthorizedModule.
Dar daca se încarcă PublicModule, utilizatorul se poate loga - caz in care ar trebui încărcat AuthorizedModule.
Condiția este ca in ambele cazuri calea sa fie ".
Din cauza asta la încărcarea aplicatiei nu pot fi ambele module definite in routes.

const routes: Routes = [
    {
        path: '',
        loadChildren: () => import('./public/public.module').then(module => module.PublicModule)
    },
    {
        path: '',
        loadChildren: () => import('./authorized/authorized.module').then(module => module.AuthorizedModule)
    },
    {
        path: '**',
        redirectTo: '',
        pathMatch: 'full'
    }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

Este cam neortodox ce vrei tu sa faci, respectiv sa incarci pagini diferite, dar sa pastrezi aceeasi ruta (url) in functie de o variabila (cookie). De regula, public vs. authorized se face cu rute diferite si guarduri pe rute, plus redirect.

Daca chiar trebuie sa faci asta, citeste articolul urmator despre cum sa incarci module lazy fara a folosi RouterModule: https://juristr.com/blog/2019/10/lazyload-module-ivy-viewengine/

1 Like

const routes: Routes = [
{
path:‘’,
component: AppComponent
},
{
path: ‘pub’ ,
loadChildren: () => import(‘./public/public.module’).then(module => module.PublicModule)
},
{
path: ‘auth’ ,
loadChildren: () => import(‘./authorized/authorized.module’).then(module => module.AuthorizedModule)
},
{
path: ‘**’,
redirectTo: ‘’,
pathMatch: ‘full’
}
];

S’ar putea sa fie o prostie ce zic, dar încerc. Scriu de pe tel, deci, scuze erorile.

Mie mi se pare ca ai nevoie de acea verificare în app-component, asta se executa initial, indiferent de ce ruta accesează utilizatorul. Acolo verifici existenta cookiesului după care în funcție de rezultat faci un simplu redirect cu router.navigate către unul dintre cele 2 module de mai sus.