Joshua Morony
Joshua Morony
  • 336
  • 7 381 036
A "hidden" side benefit of DECLARATIVE code
My Angular course: angularstart.com/
I've never given much though to code folding since it has never really struck me as anything particularly useful, and perhaps potentially even something that will result in worse code.
But! I had a sudden realisation in terms of declarative code and code folding which makes it far more useful and will likely end up being a permanent part of my workflow.
Get weekly content and tips exclusive to my newsletter: mobirony.ck.page/4a331b9076
Want to build mobile apps with Angular?: ionicstart.com
0:00 Introduction
0:38 The problem
1:19 Code folding with imperative code
2:48 Code folding with declarative code
3:52 Code folding in Angular
#angular #phaser #declarative
- More tutorials: modernangular.com
- Follow me on Twitter: joshuamorony
Переглядів: 5 402

Відео

How billionaire Charles Munger fixed my Angular app
Переглядів 7 тис.День тому
My Angular course: angularstart.com/ 19th century mathematician Carl Jacobi is often cited for his (roughly translated) "Invert, always invert" quote. In this video we take a look at how applying this advice to state management in Angular yielded fantastic results for me recently Video on folder structure: ua-cam.com/video/7SDpTOLeqHE/v-deo.html Get weekly content and tips exclusive to my newsl...
Observables are WAY easier than they seem
Переглядів 7 тис.14 днів тому
My Angular course: angularstart.com/ Observables can seem like some sort of complex magical constructs that "stream" data, and perhaps it invokes thoughts of managing scenarios like streaming video data or web sockets. But... the fundamental concept is not all that complex, and can be built with some pretty simple functions. What is an Observable (free lesson): angularstart.com/modules/intro-to...
How Angular plans to survive the next 10 years
Переглядів 13 тис.21 день тому
My Angular course: angularstart.com/ Angular v18 has been released which makes further progress towards the overall goal of making Angular viable for the next 10 years or web applications. Perhaps the most important part of this is signals, the new reactivity system, and zoneless change detection. v18 announcement video: ua-cam.com/video/DK8M-ZFjaMw/v-deo.html v18 blog post: blog.angular.dev/an...
How Electron jailbreaks your web application
Переглядів 6 тис.Місяць тому
My Angular course: angularstart.com/ Electron not only allows you to distribute your web application as a native desktop application, it also allows your web application to access native APIs... but how exactly does it do that? Get weekly content and tips exclusive to my newsletter: mobirony.ck.page/4a331b9076 Want to build mobile apps with Angular?: ionicstart.com 0:00 Introduction 0:50 Inter-...
How I code in Angular when nobody is watching
Переглядів 10 тис.Місяць тому
My Angular course: angularstart.com/ I get surprisingly few opportunities to code Angular applications specifically the way I want to without needing to carefully consider risks and weigh trade offs. This video covers how I'm using the Analog component format, createInjectable, and signalSlice in a situation where I *do* get to code however I want. More on Analog SFC: ua-cam.com/video/15vHXCMhl...
Creating DESKTOP apps with Angular is easier than you think
Переглядів 17 тис.Місяць тому
My Angular course: angularstart.com/ Getting a native desktop application up and running with Electron and Angular is surprisingly quick. In this video, we make use of these frameworks, in conjunction with Nx, to create the basic scaffolding required to create desktop applications with web tech Get weekly content and tips exclusive to my newsletter: mobirony.ck.page/4a331b9076 Want to build mob...
Here's what I've figured out about Angular signals
Переглядів 13 тис.Місяць тому
My Angular course: angularstart.com/ I've been using and experimenting with signals in Angular since they came out around a year ago. This video covers some key ideas I've arrived at when using signals for state management. Get weekly content and tips exclusive to my newsletter: mobirony.ck.page/4a331b9076 Want to build mobile apps with Angular?: ionicstart.com Source code (toSignal version in ...
A 7 minute guide to SESSIONS and COOKIES for authentication in Angular
Переглядів 9 тис.Місяць тому
My Angular course: angularstart.com/ If we want our applications to be secure then we need to make sure our backend is secure. Before we send any data to a user, we want to make sure that they are authorised to receive that data. Sessions and cookies are a great way to facilitate this and has been the backbone of many authentication approaches for a long time. Previous video: ua-cam.com/video/1...
This made me NOT hate note taking (as a developer)
Переглядів 8 тис.2 місяці тому
My Angular course: angularstart.com/ Zettelkasten made me completely change the way I approach note taking, and it's the first time I've ever actually enjoyed note taking. This video shows how I use a Zettelkasten system inside of neovim for note taking/learning. More on Zettelkasten: ua-cam.com/video/L9SLlxaEEXY/v-deo.html Article from video: medium.com/@eugeniyoz/angular-signals-reactive-cont...
What happened to Analog's experimental ".ng" format?
Переглядів 5 тис.2 місяці тому
My Angular course: angularstart.com/ A little while ago we talked about Analog's experimental .ng format that allowed creating Angular components with a component authoring experience that more closely resembles something like Svelte or Vue This video is a follow up to cover what ended up happening with the format. 3 months of WebStorm free: www.jetbrains.com/store/redeem/ (use code: K4UQV-BPUN...
Full stack reactive CRUD in Angular with Go (or any REST API)
Переглядів 9 тис.2 місяці тому
My Angular course: angularstart.com/ I've received quite a few requests for guidance on how to integrate the reactive/declarative RxJS and Signals approach I often talk about with a typical REST API backend. In this video, we walk through what it would take to swap out a local storage solution for a REST API in the Quicklists application from my course. Frontend: github.com/joshuamorony/angular...
A workflow for complex open source contributions
Переглядів 3,8 тис.2 місяці тому
My Angular course: angularstart.com/ Once you move past the basics, the process for getting a pull request for some more complex contribution can be quite intimidating. This video aims to show what the entire process might look like from the idea to getting your pull request merged. Get weekly content and tips exclusive to my newsletter: mobirony.ck.page/4a331b9076 Want to build mobile apps wit...
Don't make my toSignal mistake in Angular
Переглядів 7 тис.3 місяці тому
My Angular course: angularstart.com/ I was trying to use toSignal in Angular with a global error handler service when I ran into some weird behaviour: when a single error occurred, I was getting tons of error messages spammed on the screen. It turns out that this was due to the way toSignal handles errors from observable streams, that results in an error being thrown every time a signal is read...
Refactoring my ugliest code with signal view queries
Переглядів 9 тис.3 місяці тому
My Angular course: angularstart.com/ The new signal based view queries in Angular make it far easier to write reactive and declarative code. In this video, we take a look at how I refactored a feature that relies on accessing a video element in the DOM to access its loadstart event. Get weekly content and tips exclusive to my newsletter: mobirony.ck.page/4a331b9076 Want to build mobile apps wit...
The mindset you need for a DECLARATIVE code refactor
Переглядів 11 тис.3 місяці тому
The mindset you need for a DECLARATIVE code refactor
I didn't know snapshot testing was a thing
Переглядів 4,4 тис.3 місяці тому
I didn't know snapshot testing was a thing
Why Neovim nerds are so obsessed with the terminal
Переглядів 77 тис.4 місяці тому
Why Neovim nerds are so obsessed with the terminal
A cautionary tale about ChatGPT for advanced developers
Переглядів 317 тис.4 місяці тому
A cautionary tale about ChatGPT for advanced developers
Watch this BEFORE updating to signal inputs in Angular
Переглядів 10 тис.4 місяці тому
Watch this BEFORE updating to signal inputs in Angular
SIGNALS can make Angular "REACTIVE" forms more reactive
Переглядів 15 тис.4 місяці тому
SIGNALS can make Angular "REACTIVE" forms more reactive
Should this be the future of Angular applications?
Переглядів 12 тис.4 місяці тому
Should this be the future of Angular applications?
Why signal INPUTS in Angular are such a big deal
Переглядів 14 тис.5 місяців тому
Why signal INPUTS in Angular are such a big deal
How to casually change the entire way Angular components work
Переглядів 10 тис.5 місяців тому
How to casually change the entire way Angular components work
A "simplified" approach to Angular components?
Переглядів 14 тис.5 місяців тому
A "simplified" approach to Angular components?
The inject function in Angular is not just a toy
Переглядів 15 тис.5 місяців тому
The inject function in Angular is not just a toy
Things are getting serious with AnalogJS (Angular SSG)
Переглядів 14 тис.6 місяців тому
Things are getting serious with AnalogJS (Angular SSG)
This taught me so much about advanced TypeScript
Переглядів 10 тис.6 місяців тому
This taught me so much about advanced TypeScript
Why does building an Angular app with INJECTION TOKENS feel so good?!
Переглядів 16 тис.6 місяців тому
Why does building an Angular app with INJECTION TOKENS feel so good?!
I tried to build my dream (simple) state management for Angular
Переглядів 11 тис.6 місяців тому
I tried to build my dream (simple) state management for Angular

КОМЕНТАРІ

  • @CesarDemi81
    @CesarDemi81 День тому

    I don't buy it, sorry. You're basically dumbing it down because you don't want some junior to work a little bit more to UNDERSTAND how dependency injection works, in exchange of later having to understand when and where you are in a context of constructor for being able to inject something and why?? That's just ridiculous. Also, by doing this, you're hiding what are the real dependencies of a component, because, like you yourself showed in the sample code, there's absolutely no hint from outside about what are its dependencies because it "magically" injects them from inside. This is a service locator pattern and the reason why it's actually considered an ANTI-PATTERN and the reason it's so discouraged in many other languages and platforms... But somehow now it's being suggested as the way to go just because some Junior might have to read and understand how dependency injection actually works (which is really not that hard at all, we've all been there). Sorry, I think this is going backwards, not forward.

  • @L-Lesiv
    @L-Lesiv 3 дні тому

    Grate explanation!

  • @jordanking3715
    @jordanking3715 3 дні тому

    "more painful than using vim as my daily editor" hahahaha

  • @geexup
    @geexup 3 дні тому

    Files tree on the right side is crazy btw

  • @AndresJimenezS
    @AndresJimenezS 3 дні тому

    You should a take a look to EffectTs im pretty sure you Will enjoy to code and to push functional and declarative to the next level

  • @stevenvaught9429
    @stevenvaught9429 3 дні тому

    You can get this same thing in React with a combination of derived state and IIFE

  • @enverusta7811
    @enverusta7811 3 дні тому

    In this approach have you ever encountered an issue like in some cases your observable triggered when you do not actually need it. Let's say you combined 2 observables, however what you actual need depends on a property of that object. What's your approach in that case? Think like you only depend xObj.foo not need to subscribe the entire object's state change. In some cases xObj.y might change and you might uninentionally trigger your entire combineLatest([x, y, z]) or something.

    • @JoshuaMorony
      @JoshuaMorony 3 дні тому

      The key is just creating a stream from whatever it is you want to react to, so if you did want to only re-calculate some thing when some particular property of an object changed then you could create a stream for that, e.g. perhaps you have a myThing$ stream that emits new objects, but if you only want to react to myThing.x changing then you could create a myThingX$ stream that maps to that specific property

  • @SuperQuwertz
    @SuperQuwertz 3 дні тому

    What editor do you use? It looks like Neovim, but has UI elements which I thought are not achievable in a regular terminal

    • @JoshuaMorony
      @JoshuaMorony 3 дні тому

      It's neovim (LazyVim specifically), you can check my config here if you like: github.com/joshuamorony/lazyvim/

  • @nicholasantidormi6238
    @nicholasantidormi6238 3 дні тому

    Everything is a stream

  • @ilanfox
    @ilanfox 3 дні тому

    At this point, you might want to explore state machines. I suggest checking out XState and the Studio tool, which allows you to visualize the machines and sequence diagrams.

  • @dimitrisdrosos245
    @dimitrisdrosos245 4 дні тому

    I see you have lsp and highlighting in your html files, could you share how you did it? I don't have any in my .html files. Thanks for your great angular content.

    • @JoshuaMorony
      @JoshuaMorony 3 дні тому

      You can check out my neovim config here if you like: github.com/joshuamorony/lazyvim/ but generally (assuming neovim) for any particular file format you want to make sure you have the Treesitter Parser installed for it + optionally LSP

    • @dimitrisdrosos245
      @dimitrisdrosos245 3 дні тому

      @@JoshuaMorony thanks, I will.

  • @justfizzbuzz
    @justfizzbuzz 4 дні тому

    Where can we try the game? 😅 super curious

    • @JoshuaMorony
      @JoshuaMorony 4 дні тому

      You can check it out at urltown.io if you like (it's more of a strange productivity/organisation tool than a game though)

  • @sulaimantriarjo8097
    @sulaimantriarjo8097 4 дні тому

    Do you share your code in this video in github by any chance? I want to learn how you set up your state

    • @JoshuaMorony
      @JoshuaMorony 4 дні тому

      The Angular example from the video can be found here: github.com/joshuamorony/angularstart-quicklists/tree/ngxtension this isn't specifically the default way I tend to go about managing state, I have some more recent videos on that topic with example code as well though if you want to explore

  •  4 дні тому

    I believe that was the whole idea behind the code folding feature.

  • @JoshuaMorony
    @JoshuaMorony 4 дні тому

    Get extra content in my newsletter: mobirony.ck.page/4a331b9076

  • @jovanthournout9707
    @jovanthournout9707 5 днів тому

    Hey Josh, Question: It appears signal slice is used here as a way to manage state for a view-model. It is directly tied to a form. The values of the form are stored in the state object. How would you go about "pushing" these values to store that tracks state on the level of a feature (or even global state). Probably it is better to define the form slice as a source for the feature-store slice. How would you expose changes on the form slice as a source? Would you use toObservable for this?

    • @JoshuaMorony
      @JoshuaMorony 4 дні тому

      Yes, this is what I have been doing to pull in state from one slice as a source for another. e.g: const audioUploaded$ = toObservable(wordsService.words).pipe( filter(Boolean), map(() => ({ status: 'uploaded' as const })) ); In this example "wordsService" is the signalSlice

    • @jovanthournout9707
      @jovanthournout9707 4 дні тому

      @@JoshuaMorony Cool, tnx for the confirmation and the quick response. Follow up question: How do you deal with the fact that in the case of this video, the form-slice lives in a view component and is bound to Formbuilder (which is clearly view oriented) and that this form slice should be able to act as a source for a different slice that is a feature slice. This means the feature slice (which would typically live in a service-like structure or a store) needs to depend on a slice that lives in the view, to be able to define it as a source. This looks like the wrong direction in the dependency graph. View components can inject store components, but not the other way around. Any toughts on that?

    • @JoshuaMorony
      @JoshuaMorony 4 дні тому

      @@jovanthournout9707 for cases where I want to share some state between a local/private slice and a shared/global slice I would have an imperative action to send that data back to the top of the data flow - specifically what I mean is that in the shared/global service I would have an actionSource (e.g. doTheThing), and then the local service/component can inject the shared service and call that actionSource with the relevant data (e.g. doTheThing(dataFromMyFormSlice))

    • @jovanthournout9707
      @jovanthournout9707 4 дні тому

      @@JoshuaMorony Ok, that's what I am also doing. Can't see any other way besides making an imperative call from an effect of one slice to the action source of the other slice. Any idea how state adapt deals with this kind of situation?

  • @sethruf8993
    @sethruf8993 5 днів тому

    Although this isn't a game changer, I'm happy about this change for a few reasons: - I won't have to import directives for basic template capabilities (conditionally showing content for example) - ngIf doesn't handle else statements elegantly, and it doesn't handle else if statements at all. Compare this to Vue's v-if syntax - no need to get ng-container involved - looks like there are some minor performance benefits, as it forces tracking and leans out templates I'm interested to see how this syntax evolves to include more capabilities.

  • @MegaMaximonstre
    @MegaMaximonstre 6 днів тому

    Simple question (that may be convoluted): "reducers are pure functions", none the less, when creating new todo (11:44), we create an ID with a simple method, yet could be RNG stuff... So function is not so pure anymore. Is it really important for NgRx to have pure reducer functions? (caching stuff may happen). Thanks for great content!

  • @tomihawk01
    @tomihawk01 6 днів тому

    I'm looking forward to these improvements but I'm worried that signals and zoneless is going to make the learning curve for new Angular developers even steeper. Automatic change detection was a paradigm shift and it's what attracted me to Angular in the first place, but now we're expecting people to manage that themselves in the code. It's a step forward for performance but a step back for code complexity and making Angular more difficult to use for beginners. If angular is going to survive another 10 years then it needs to attract new developers and it's hard to see how making it more difficult to use is going to do that. Sorry it's a bit pessimistic because I'm genuinely excited about these new features. I just want to see angular last.

  • @Thierry4Teen
    @Thierry4Teen 6 днів тому

    Well it's a nice information, starting Angular from v2 until v4 then switching to react it's the problem i've always faced when working with inheritance components, huge thank you

  • @kavinkumar
    @kavinkumar 6 днів тому

    Won't this lead to a pessimistic approach initially to solve our problems

  • @NormalNvim
    @NormalNvim 7 днів тому

    Would you review NormalNvim?

  • @RuslanSendecky
    @RuslanSendecky 7 днів тому

    I'd been using neovim for many years and recently I got swayed.😅 My life balance was heavily disrupted by Helix. OMG, it's so good. Been testing and using Helix for about 2 months now and I don't think I am going back. For all the Neovim lovers, I recommend trying it out. I feel like "object -> verb" model does make sense in a way that you clearly see what you act on before you actually act.

  • @mohsin6312
    @mohsin6312 9 днів тому

    How did you switch your file explorer to the right side, sir?

    • @JoshuaMorony
      @JoshuaMorony 8 днів тому

      you can see my neotree config here: github.com/joshuamorony/lazyvim/blob/main/lua/plugins/neo-tree.lua (note the window position = "right" config specifically)

  • @poloolo69
    @poloolo69 9 днів тому

    is this guy flexing?

  • @WoWUndad
    @WoWUndad 10 днів тому

    im pretty sure asking an ai plugin inside in vscode can build vim in 10 seconds

  • @mfpears
    @mfpears 10 днів тому

    Cool! A lot of our mindset is implicit so it's hard to explain why some patterns are better. It's great you were able to explain this soon after you realized it. I was lucky enough in 2017 to work with a super computer science geek who explained something like this to me. Basically that dependencies can look like a diamond instead of a tree, where there's the root of the application that's extremely light, and then you can have other stuff that's common for all features that isn't in the root, but rather a tiny standalone thing that gets imported into other things. So small, focused things get imported into bigger features that combine features, like dashboards. When he explained it, it felt like my brain became untangled, and like you said it became obvious in hindsight. So obvious that I quickly forgot the mental model I used to have so I can't even explain the realization anymore! And I can't immediately tell who doesn't think of things this way either. But I see weird import patterns all the time. For example: importing routing modules into feature modules. It seemed like the whole community was doing that before standalone components.

    • @JoshuaMorony
      @JoshuaMorony 10 днів тому

      I think the idea about a lot of our mindset being implicit is interesting. I feel like I can even use an idea or pattern quite effectively for a long time before some final piece clicks into place that allows me to think about it in a more concrete way (and a way that I could explain without vaguery and hand waving). Declarative code was very much like this for me - for a long time I used the concepts and benefited from them, but then at some point it's like some final little piece of the puzzle clicks in that reveals everything with much more clarity. I often get the sense that my subconscious mind knows these things better than I do (which leads to those ah-ha! moments in the shower), the trick I feel is getting to the point where I can think about it clearly in my conscious mind. Feels a bit woo-woo but I've wondered if there are ways to better or more intentionally leverage our subconscious mind or if there has been much research done in that area.

    • @mfpears
      @mfpears 8 днів тому

      Definitely not woo woo . I've read a few psychology books and I think most people underestimate how much of who they are and what they think is subconscious.

    • @JoshuaMorony
      @JoshuaMorony 8 днів тому

      ​@@mfpears have you read The Master and His Emissary? It's been on my reading list for years now, if I remember correctly it covers the idea of our conscious mind sort of being like a dumb king that thinks it's in control/thinking of all these great plans, but most of it is coming from our subconscious mind (think it touches on implications of the split brain experiments). Curious to know if you think it's worthwhile if you have read it.

    • @mfpears
      @mfpears 7 днів тому

      @@JoshuaMorony I haven't, but I've learned a lot of psychology over the past 10 years, and now I'm realizing how little psychology most people understand, so I'm looking for resources that might be simpler or purer than how I came to learn these things. I read The Righteous Mind in 2015 and Jonathan Haidt talks about "the elephant and the rider"-so, different metaphor, but same idea I think. But it also has a lot of political stuff that might be boring to some people. So I'm looking for a resource that clearly and convincingly lays out the argument for the importance of subconscious processing. I'm trying to remember the first concepts that opened my mind to this idea, because a lot of people resist it pretty strongly. It may have been How to Win Friends and Influence People, because it showed how it's the rule rather than the exception that in order to persuade people, the majority of what you tend to has to be stuff other than the main point you're trying to communicate. Because deep down most people most of the time have to know you're on their side before they'll even listen to you. And then once you have an idea that changes your perception of people and the world, you start seeing it everywhere. So that's why it's easy to forget what it's like to not see it at all. So this is my primary focus now. I still love learning, but I feel like I've strayed so far from common wisdom that I need to sort of find a way to start bringing more people along. In programming as well.

  • @invictuz4803
    @invictuz4803 10 днів тому

    You could coin this as the Dependency Inversion principle!

    • @JoshuaMorony
      @JoshuaMorony 10 днів тому

      It's funny because this is quite literally a dependency inversion, but I've never really though about DI from SOLID in that way (maybe I should), but I think about it more in the context of depending on abstractions instead of concretions (not changing the direction of a dependency)

  • @lordicemaniac
    @lordicemaniac 10 днів тому

    OoOor, you could just pick the state service out of word/dashboard service to be its own shared service and both word/dashboard service could be dependent on it... if you could that easily move those states to another service, then it probably can be service on its own

  • @deatho0ne587
    @deatho0ne587 11 днів тому

    Well I unsubscribed since that was inverting the state. /s Just make sure the part you are inverting needs to be done.

  • @TheSysmat
    @TheSysmat 11 днів тому

    Invert dislike 😅

  • @TheSaceone
    @TheSaceone 11 днів тому

    why do you always need "as const" in your signalSlice fun for the status prop in your state?

    • @JoshuaMorony
      @JoshuaMorony 10 днів тому

      Because its supposed to be a specific union type or strings (e.g. "a" | "b" | "c"), without "as const" the type will just be a generic "string" not a specific string

    • @TheSaceone
      @TheSaceone 10 днів тому

      @@JoshuaMorony that makes sense, thank you. I was creating specific types but I like your const approach most. Thank you Josh, been trying the signalslice and I find it awesome :)

  • @leosconflicts
    @leosconflicts 11 днів тому

    Hi Josh, this is really a great video, but I do have a question about it the architecture that I haven't seen in any of your other videos wherever you talk about, how do you deal with shared features (features that depends on other features)? In the context of your video, let's say your "notes" feature can be associated with one or more clients, so somewhere in your "notes add" feature you'd have to show a list of clients from which the user can select from. How would that look like? Should there be a "client list" smart component for each feature that needs to use it? Should there be a shared service specific for loading data for this?

  • @rkjessop
    @rkjessop 11 днів тому

    Nice ending!!! lol!!!

  • @spencereaston8292
    @spencereaston8292 11 днів тому

    Great mantra. Thanks!

  • @MrBloodWoork
    @MrBloodWoork 11 днів тому

    That actually makes a lot of sense. Regarding folder structure - I have all my data fetching services in one place, kinda like this: core/inventory/products/ product.service.ts and product.types.ts. My core is kinda like your shared as the services can be injected by anyone and don't hold any state, and then I have my pages: pages/inventory/products/products.ts and products.store.ts (ngrx component store) which then holds all the state of that component.

    • @MrBloodWoork
      @MrBloodWoork 11 днів тому

      And to not unnecessarily fetch data multiple times I have implemented a caching service using cashew using cache buckets and a cache bucket gets cleared by my backend when someone changes something -> a cache clearing event with the specific bucket name is sent to all clients connected via SignalR. Don't know how well that will scale though but it works very well and I have made it so that if you fetch lets say all products it also caches the keys of each entity and if you fetch a single product it won't have to go to the server if said product has already been fetched with the "get all" request (or paginated request in my case)

    • @loko1944
      @loko1944 10 днів тому

      @@MrBloodWoork Wow, neat idea. I used to cache manually some standalone bits of state that were fetched often, but never implemented scaleable solution. I m just wondering. How exactly backend clears cached data? You receive some kind of array key with changed objects or something?

    • @MrBloodWoork
      @MrBloodWoork 10 днів тому

      @@loko1944 No, in the frontend I have so called cache buckets. With cashew you can decide for every request which cache bucket the data should be stored in. I used a string backed enum to assign the names to the buckets. Let's assume we have the products cache bucket and we use it for the GET /products request in the frontend. Now in my backend I just call my cache invalidation service with the products enum value right after code that changes or deletes a product. So when POST /products is called then a message is broadcasted to all connected clients to clear their cache with the cache bucket name "products". However I did have to create a dependency map and clear all other buckets which depend on products because e.g. an asset has a product and so assets have to be cleared too because I have joined assets and products when fetching assets to be able to display the assets product name.

    • @MrBloodWoork
      @MrBloodWoork 10 днів тому

      @loko1944 No, in the frontend I have so called cache buckets. With cashew you can decide for every request which cache bucket the data should be stored in. I used a string backed enum to assign the names to the buckets. Let's assume we have the products cache bucket and use it for the GET /products request in the frontend. Now in the backend I just call my cache invalidation service with the products enum value right after code that changes or deletes a product. So when POST /products is called then a message is broadcasted to all connected clients to clear their cache with the cache bucket name "products".

    • @MrBloodWoork
      @MrBloodWoork 10 днів тому

      @@loko1944 However I did have to create a dependency map because e.g. an asset has a product and so assets have to be cleared too because I have joined assets and products when fetching assets so I can display their product names.

  • @adambickford8720
    @adambickford8720 11 днів тому

    I use charlies estate management framework.

    • @JoshuaMorony
      @JoshuaMorony 11 днів тому

      I'm sure I'll be reading more from Charlie, I picked the book up on a whim but I don't think I've taken so many notes from a book in my life

  • @raulrothschild5876
    @raulrothschild5876 11 днів тому

    Hello Joshua, thanks for sharing the video. What your thoughts about creating a specific lib/module to expose that dependecy like a "contracts"? When i have composable features, like "customers", "sales" to build a "dashboarad". I expose 2 new from "customers" and "sales" called "dashboard-api-claim" and manage what would be exposed to dashboard feature, commonly data-access/some-api-service.

    • @JoshuaMorony
      @JoshuaMorony 11 днів тому

      If I'm following you correctly then I think that makes sense for having more granular control over what is exposed (I haven't personally done something like it though)

    • @g-luu
      @g-luu 11 днів тому

      Yes this is mostly what is recommended and i think Manfred Styer and the angular architect team started it. Inverting is good but it ends up ugly as time pass cause you end up having a shared service that has trivial APIs cause of some small dependency.

    • @raulrothschild5876
      @raulrothschild5876 9 днів тому

      @@g-luu Interesting to know. I never did large projects that way thats why i probably never notice that

  • @beckerp86
    @beckerp86 11 днів тому

    I loved the video! A great mindset to have. And, as requested, I unsubscribed.

    • @JoshuaMorony
      @JoshuaMorony 11 днів тому

      I've decided always invert is terrible advice now

    • @orlovskyyyy
      @orlovskyyyy 11 днів тому

      @@JoshuaMorony thinking in takeUntilDestroyed() terms no one should unsubscribe as long as your chanel is available 😅

  • @JoshuaMorony
    @JoshuaMorony 11 днів тому

    Join my newsletter for more content: mobirony.ck.page/4a331b9076

  • @ShivamKumar-jj6ln
    @ShivamKumar-jj6ln 11 днів тому

    export const JobHandler: Handler = async () => { const module = await import(`@nova/components`); const viewContainer = inject(ViewContainerRef); viewContainer.createComponent(module['LoaderComponent']); console.log('JobHandler is working'); return true; }; Error: NG0203: inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with `runInInjectionContext`

  • @nomadshiba
    @nomadshiba 12 днів тому

    you know you can just return promise and convert Signal<Promise<Then>> into a Signal<Until | Then | Error>. also adding retries to promise doesn't require rxjs, you can have your own retry wrapper that can also return a promise which doesn't have to be aware of signals are a thing

  • @swapnilpatel5743
    @swapnilpatel5743 13 днів тому

    haha, I see you've used 'firebase' and not '@angular/fire' as the later still doesn't have zoneless support. 😢

  • @potatopower2144
    @potatopower2144 14 днів тому

    Would a strong grasp of the material in this course be enough to get an entry level role using Angular? I use Java Spring backend, MySql, Html, Css, JS, and some TS with Angular on frontend. I'm just not sure when I'll ever be good enough. I have a portfolio site, 5 apps deployed to AWS EC2. I have a 6 month window before moving back to the States with my family and want to find work ASAP.

    • @JoshuaMorony
      @JoshuaMorony 13 днів тому

      I don't know your situation, nor do I really know the current job market first hand as I have not had to deal with it any time recently, but my guess is that it sounds like you already would "qualify" for an entry level role (maybe beyond that), and maybe the issue lies somewhere other than needing to know more stuff to land a role (likely a big part of the problem is that from what I have heard the market for entry level positions is very competitive/difficult at the moment). This isn't particularly useful advice, because I don't think I have good advice to give on how to land a job in today's market, but I did want to make it clear that I don't think going through my course is necessarily going to help you land a job. That said, at least from my perspective, someone who has a strong grasp of all the topics covered in the course would be among the best Angular developers (but also, that would come through repeated application of these concepts over a period of time to develop that "strong grasp"). But ultimately, even if you have all these skills, it still might be difficult to land a job without prior positions/network.

  • @willmoorby9781
    @willmoorby9781 14 днів тому

    Do you have any videos of your Neovim/tmix config? I love your Monokai like theme!

    • @JoshuaMorony
      @JoshuaMorony 13 днів тому

      I don't have a video, and my tmux config isn't public, but my neovim config is available here: github.com/joshuamorony/lazyvim/

  • @ihateidiots9484
    @ihateidiots9484 14 днів тому

    Redux and NgRx popularity is the sign that modern front-end developers became stupid

  • @MartinMikulaPrespic
    @MartinMikulaPrespic 15 днів тому

    What is the point of calling toSignal? What is the benefit? Why not to use just selector with rxjs pipe(map) and bind with async pipe?

  • @TheSuperAllumette
    @TheSuperAllumette 17 днів тому

    Arf, just bought it yesterday 😢

  • @Joao.Costa.5504
    @Joao.Costa.5504 17 днів тому

    Basdasdas

  • @tarquin161234
    @tarquin161234 18 днів тому

    @JoshuaMorony I have used signals but prefer to just carry on using rxjs alone since I don't feel I gain anything. A reactive system needs to support asynchronous operations, which signals do not do. Combining signals feels like jamming a square peg into a round hole. It feels like a pointless change to an already perfect way of front-end programming. I think the only reason signals were introduced was because the Angular team see that most people don't want to learn rxjs. Great; instead of improving, lets all adopt an inferior system. There's even talk that Angular are aiming to remove rxjs completely from the core Angular packages. I am really disappointed that this is the direction the Angular team are taking this direction as I was so happy with Angular the way it was. What are your thoughts on this?

    • @valcron-1000
      @valcron-1000 17 днів тому

      100% agree. I shared the same opinion back when signals were introduced. They don't solve anything that rxjs doesn't already solve (except maybe for "glitches" but those can be worked around in rxjs) but now you have a fractured ecosystem where every Angular app becomes a mess of mutation with zonejs + signals + rxjs. Unfortunately the Angular team will keep adding changes to the point where it will become a mix of React/Vue/Svelte instead of having its own identity.

    • @JoshuaMorony
      @JoshuaMorony 17 днів тому

      I got into some thoughts around this in this video: ua-cam.com/video/iA6iyoantuo/v-deo.html but my general opinion is that signals are a better way to represent state, and observables are a better way to handle events, and the flow I've landed on in my apps of starting with observables which flow through to signals to be consumed by the components I quite like/am happy with. But if you do go the pure RxJS approach I don't think there's anything wrong with that (generally speaking, a pure RxJS approach is going to be fine, a pure signals approach might be questionable)

    • @tarquin161234
      @tarquin161234 17 днів тому

      @@JoshuaMorony thanks man

    • @mnemanja
      @mnemanja 17 днів тому

      @@valcron-1000 Signals may become an integral part of Javascript, FYI, so there's not running away from it. It looks like they're here to stay.