Angular Signals: What? Why? and How?

Sdílet
Vložit
  • čas přidán 27. 07. 2024
  • An exciting new feature is coming to Angular: signals! Starting in Angular v16, Angular developers can leverage the power of signals to create more reactive applications. Signals provide a new way for our code to inform our templates (and other code) that our data has changed, offering more granular control over how and when updates are propagated and improving change detection.
    So, what are signals? Why would you want to use a signal? How do you create, read and change a signal? And how do you define a computed signal? Watch this video for details and a demo of these cool new features!
    Links
    My completed Stackblitz: stackblitz.com/edit/angular-s...
    Content
    00:00 Introduction to Angular Signals
    00:51 Why use signals?
    03:58 What are signals?
    06:16 How to create signals?
    06:34 Where to use signals?
    06:54 Creating a signal
    09:10 Reading a signal
    09:14 Setting a signal
    11:18 Signal methods: set, update, mutate (NOTE: mutate is no longer an option, use update)
    12:06 Defining a computed signal
    13:14 Using an effect for side effects
    14:36 Signals and templates
    15:15 Current state of signals
    15:36 Suggestions for how to use signals
    16:00 Demo
    NOTES
    * There is a typo on the slide at time code 2:12. The exPrice = price * quantity calculation should be exPrice = this.price * qty.
    * As of Angular v17, .mutate is no longer an option. Use .update instead.
    ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
    😊About Me
    Hey! I'm Deborah Kurata
    I'm a software developer and CZcams content creator. I speak at conferences such as VS Live and ng-conf. I write articles for freeCodeCamp. And I'm a Pluralsight author with courses in the top 10 most popular (out of 10,000+) over the past 5 years. For my work in support of software developers, I've been recognized with the Microsoft Most Valuable Professional (MVP) award, and I'm a Google Developer Expert (GDE).
    Contact me on Twitter: / deborahkurata
    Find my Pluralsight courses: www.pluralsight.com/profile/a...
    Access my freeCodeCamp articles: www.freecodecamp.org/news/aut...
    View my CZcams content: / @deborah_kurata
    ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
    #angular #angularsignals #signalsinangular #angulartutorials #rxjsandsignals #signalsandrxjs #angulartutorial #signals #signalsangular #angularsignalsexample #angular16 #angularsignal #learnangular #angular16signals #angularsignalsrfc #signalsangularapp #angularv16 #signalsfordatasharinginangular #signalsexampleangular #angularsignalsdeepdive #angularsignalstutorial #signalsangulartutorial #signalstutorialangular #bestpractices #demo
  • Věda a technologie

Komentáře • 213

  • @184Simon
    @184Simon Před rokem +48

    Deborah, we are so blessed to have you in the Angular community!!!

    • @deborah_kurata
      @deborah_kurata  Před rokem +4

      Thank you so much! 🙏

    • @linamariabeltrandurango
      @linamariabeltrandurango Před 8 měsíci +2

      @@deborah_kurata I sincerely appreciate your time and knowledge you shared.

    • @thenatedoggchannel9719
      @thenatedoggchannel9719 Před 4 měsíci

      Spot on. As a constantly struggling Angular adopter, Deborah has been one of the most valuable resources I've had. Her Plural Sight courses are phenomenal.

  • @everyonesview
    @everyonesview Před 6 dny

    It's unbelievable the time and effort you put in your tutorials, Deborah. We appreciate you - always!

  • @nikhilgoyal007
    @nikhilgoyal007 Před 14 dny +1

    I absolutely love your way of teaching. I can only guess how much effort you have to put in to make it this tasty for the rest of us. Bow of respect. Kind Regards.

    • @deborah_kurata
      @deborah_kurata  Před 11 dny

      Thank you very much! Yes, it takes several days to put one of these together. So glad to hear that the videos are useful!

  • @joeyvico
    @joeyvico Před 8 měsíci +13

    Oh my goodness! Aren't you the best Angular tutor on youtube?! Honestly, you clearly standout. Please continue with your teaching style. Thank you Deborah

    • @deborah_kurata
      @deborah_kurata  Před 8 měsíci

      Wow, thank you! That is very kind of you to say! 😊

  • @YesDiscovery
    @YesDiscovery Před 3 dny

    Thank you for your clear and concise explanations. You make Angular concepts easy to understand.

  • @rgarafulicm
    @rgarafulicm Před 9 dny

    This is pure gold, Deborah. Congrats!

  • @_khaledg
    @_khaledg Před rokem +15

    Thank you Deborah, you are so talented at explaining concepts.
    Would love to see videos related to standalone APIs and non-destructive hydration as well.

    • @deborah_kurata
      @deborah_kurata  Před rokem +6

      I'll add standalone APIs to my list! 😀
      I don't have much experience with SSR, so I'm not that knowledgeable in its hydration nor how it's changing. So I may not be able to tackle that one any time soon. :-)

  • @meeeh
    @meeeh Před rokem +9

    Oh yesss! I'm so happy you made a video about signals. Everything seems so much easier when you explain it! That's a rare talent. I'm a big fan 😊

    • @deborah_kurata
      @deborah_kurata  Před rokem +2

      Thank you so much! Great to hear it was helpful! 😊

    • @vidyas1545
      @vidyas1545 Před rokem

      I second this !!! Why I didn’t know about your courses earlier 😊

  • @mqb268
    @mqb268 Před rokem +1

    Thank you Deborah for updating. Your videos are very easy to understand and useful.

    • @deborah_kurata
      @deborah_kurata  Před rokem

      Thank you for the kind words.🙏 Glad you found the video useful!

  • @davidaimakhede1980
    @davidaimakhede1980 Před 8 měsíci +1

    Best Signal tutorial i have seen so far! Weldone!

  • @kjbetz
    @kjbetz Před rokem

    Great stuff, @Deborah! Thanks for the update!

    • @deborah_kurata
      @deborah_kurata  Před rokem +3

      Thank you! I'll be doing more as more features are added to signals.
      I'm planning on doing a signal Observable video as soon as the from/to features are implemented in Angular (hopefully v16?)

  • @deibymontoya9284
    @deibymontoya9284 Před rokem +1

    What a brilliant way to explain this!
    I love how you explain each concept wich such a good examples!
    Thank youuu, now it's very clear to me this exciting mew feature!

    • @deborah_kurata
      @deborah_kurata  Před rokem +1

      Thank you so much! It's great to hear that the video was useful!

  • @sepidehmasoomi7044
    @sepidehmasoomi7044 Před rokem +1

    Wow, This video is absolutely awesome! The content is explained so clearly and straightforwardly. Thank you!

  • @deliailetchi9740
    @deliailetchi9740 Před rokem +1

    ❤So good to find these tutorials on CZcams!

  • @message59
    @message59 Před rokem

    you are a great great teacher deborah 👍 you always break things down in a way that makes it easy to get the bigger picture so just wanted to say thank you for your work 😁

  • @jeanfrancoisgamache
    @jeanfrancoisgamache Před rokem

    The best signals explanation that a find, always clear. Thank you

  • @VinitNeogi
    @VinitNeogi Před rokem +2

    Can't wait for v16 release!

    • @deborah_kurata
      @deborah_kurata  Před rokem +1

      Agreed! They just announced that it is expected to be released May 3.

  • @wiliam334
    @wiliam334 Před 10 měsíci

    This the best signals tutorial I have ever seen
    Thank you Debora

  • @prathmeshjoshi8179
    @prathmeshjoshi8179 Před 9 měsíci

    Thanks a lot Deborah for this amazing video.
    Perfectly explained.

  • @fieryscorpion
    @fieryscorpion Před 6 měsíci

    Wow. That was amazing. Concise and crystal clear!

  • @ayoubelhayat9650
    @ayoubelhayat9650 Před rokem

    Fantastic explanation 🙌🏻. Thanks a lot Deborah

  • @metric152
    @metric152 Před rokem

    This looks wonderful. Thanks for the clear well explained examples.

  • @leonidesmuguercia4211

    The best explanations always come from you!!!!!

  • @GilbertoAlbino
    @GilbertoAlbino Před 4 měsíci

    Hi Debora, hope you are fine. Thanks for being so respectful with so well spoke and pronounced English. Most popular CZcamsrs actually speak so fast that they seem to be talking to walls. For people that don't have English as a frist Language, listening to them is just an activity of entertainment, but listening to people like you, is a profound and spectular oportunity to learn and grow. Thanks for being so respectful not just with the so carefully and well-prepared work, but with quality knowledge you have!

  • @AntonioSantana-ll8il
    @AntonioSantana-ll8il Před rokem

    Terrific explanation!! thanks, i can't wait to see more content, Greetings from Colombia!

  • @irinadrozd1573
    @irinadrozd1573 Před 6 měsíci

    Great video Deborah! Thank you

  • @marcosjrs
    @marcosjrs Před 6 měsíci

    Thank you very much, Deborah. Your videos are very helpful, even for people who don't speak English very well. Everything is very well explained, step by step.

    • @deborah_kurata
      @deborah_kurata  Před 6 měsíci

      So glad to hear they are useful. Thank you! 😃

  • @AmmarTheTrainer
    @AmmarTheTrainer Před 6 měsíci

    best explanation of signals so far... thank-you miss @Deborah Kurata for sharing with us..

    • @deborah_kurata
      @deborah_kurata  Před 6 měsíci +1

      So glad it was helpful! Thanks for watching!

  • @demidovmaxim1008
    @demidovmaxim1008 Před rokem

    Thank you! This is the best video about signals I have found

  • @murilomelo6752
    @murilomelo6752 Před rokem

    Instant subscription! What a beautiful way to explain.

  • @fmontes83
    @fmontes83 Před rokem

    Best Signals video ever! Thank you!

  • @VladimirDevyatoff
    @VladimirDevyatoff Před 3 měsíci

    Hey. Thanks a lot four your work! You explain the topic very well!

  • @wonsupjung2527
    @wonsupjung2527 Před rokem

    As you are teaching, using RxJS in programming makes the code simpler, more readable, and easier to maintain. However, after discovering the Signal feature recently introduced in Angular, I realized what an amazing technology it is. Through your lectures, I learned that it can make programs even more elegant and improve readability.
    Once again, thank you for creating such valuable lectures.

    • @deborah_kurata
      @deborah_kurata  Před rokem

      I'm so glad to hear that these videos have been useful. Thank you for watching!

  • @yuriinadilnyi3029
    @yuriinadilnyi3029 Před rokem

    It's a clearest explanation of signals

  • @augustincalin
    @augustincalin Před rokem +1

    Thanks for explaining this -- as always, it's a pleasure to learn from you.
    Small tip: in VS Code, and also in StackBlitz, when you want to replace the same value in multiple places (like you did for the Angular version), you can select one of the instances and press Shift + Ctrl + L --> it will select all of them. Then, as soon as you start typing the new value, it will be done at once, changing all that instances.

    • @deborah_kurata
      @deborah_kurata  Před rokem +1

      Thank you for the kind words. 😀
      Great tip. I knew it worked in VS Code, I didn't realize that Stackblitz supported the feature as well. (I guess I should have known as I believe Stackblitz is VS Code on the inside.)
      Thank you so much for sharing this tip! 🙏

  • @vd2828
    @vd2828 Před 5 měsíci

    Awesome video. Thank you so much

  • @fahadgaliwango4502
    @fahadgaliwango4502 Před rokem +3

    Signal is value + notification change. This will bring less boilerplate code with the internal reactive code of the component .instead of observable which requires subscription each time value is needed. Thanks @Deborah 🎉

    • @deborah_kurata
      @deborah_kurata  Před rokem +1

      Yep! But you'll probably still see Observables in services to handle http requests and other async operations.

  • @lingarajsureban9720
    @lingarajsureban9720 Před 11 měsíci

    as always very fantastic explanation on this topic... 👋👋

  • @mikopanjean8756
    @mikopanjean8756 Před rokem

    Great Tutorial, that makes life simpler.

  • @gboyegalawal8881
    @gboyegalawal8881 Před 4 měsíci

    The only video that really explains it well

  • @julianshaw2000
    @julianshaw2000 Před 8 měsíci

    Best Angular tutor!!!

  • @rs4267
    @rs4267 Před 7 měsíci

    Thanks i've understand the concept and see how much sigals can be usefull

  • @MohamedHassan-hk6dh
    @MohamedHassan-hk6dh Před 5 měsíci

    thanks for your effort , i hope to see videos related to micro frontend in angular

    • @deborah_kurata
      @deborah_kurata  Před 5 měsíci +1

      Thanks for watching! I'll add that to my list. Thanks!

  • @dreamvallyhasan4807
    @dreamvallyhasan4807 Před 4 měsíci

    Best Angular tutorial ever ..mis we want a large projects using .net core api, angular 17 + RDLC with you ..thanks from the bottom of my heart

  • @chuonchuon7386
    @chuonchuon7386 Před 9 měsíci

    your videos are great. thank you. 😀

  • @CarlosRivadeneiraZ
    @CarlosRivadeneiraZ Před 8 měsíci

    I'm feeling like I'm in plurlsight, thanks for share your knowledge Deborah

  • @makacoder
    @makacoder Před 8 měsíci +1

    Signal is I think a borrowed idea from knockoutjs (it's called observable in knockoutjs). Computed is a knockoutjs feature as well

    • @deborah_kurata
      @deborah_kurata  Před 8 měsíci

      It seems so. Have you see this? dev.to/this-is-learning/the-evolution-of-signals-in-javascript-8ob

  • @pedromoraes2129
    @pedromoraes2129 Před 7 měsíci

    Signals seemed to me like angular is taking some lessons within react 😅 pretty amazing indeed. I worked a few years with Angular, but nowadays I'm working mostly with nextjs and it feels good to see my old boy getting these nice features.

  • @dixavier27
    @dixavier27 Před 28 dny

    AMAZING!

  • @user-nq8mo3uw3v
    @user-nq8mo3uw3v Před 9 měsíci

    Thank you well explaind

  • @pavankumarrampathati7818
    @pavankumarrampathati7818 Před měsícem

    Thank you very much for let us know🎉🎉🎉🎉🎉🎉

  • @sudhansusatyam5835
    @sudhansusatyam5835 Před 5 měsíci

    You are the best tutor I found so far... But how? Give some tips

  • @amerispunk
    @amerispunk Před rokem +1

    I'm a big fan of your Pluralsight courses as well! There are so many of them I feel like I'll never keep up, LOL. I'm hoping that Angular can add these features such as signal, effect and compute without slowing down the responsiveness. I wonder if there are any numbers on that?

    • @deborah_kurata
      @deborah_kurata  Před rokem +3

      Thank you! 🙏
      Signals will improve responsiveness ... especially if you create signals for all of your bound properties and turn on OnPush change detection.
      In a future version of Angular, signals will improve responsiveness even further by allowing for "zone-less" change detection. (zone.js is what Angular currently uses for change detection)

  • @pronileston4869
    @pronileston4869 Před rokem +1

    Love it

  • @Tech_Publica
    @Tech_Publica Před 6 měsíci

    You are always the best... I hope to see you making a new , complete and in depth , Angular course for Pluralsight soon!

    • @deborah_kurata
      @deborah_kurata  Před 6 měsíci +1

      Thank you!
      And I did! You can find my newest course on RxJS and signals here: www.pluralsight.com/library/courses/rxjs-angular-signals-fundamentals
      (Pluralsight won't allow me to update the "Angular Getting Started" course. 😥)

  • @diegoj_c6751
    @diegoj_c6751 Před rokem

    I loved it!

  • @SonNguyen-lw9nj
    @SonNguyen-lw9nj Před rokem

    Thanks so muck

  • @tuntunpandit8367
    @tuntunpandit8367 Před rokem

    Please post more videos on angular. Thanks

  • @pranambhat7964
    @pranambhat7964 Před rokem

    Big fan here!

  • @andreasvasd8802
    @andreasvasd8802 Před rokem

    Very interesting content! Waiting more to comee :)

  • @sylviesumer7680
    @sylviesumer7680 Před rokem

    Thanks Deborah, I have not used Angular since version 2 but after hearing about Signals and the Standalone Components, I am seriously considering using Angular again.

    • @deborah_kurata
      @deborah_kurata  Před rokem

      Nice! Hope you have as much fun with these new features as I have!
      All the best.

  • @winnemucca-sk5392
    @winnemucca-sk5392 Před 10 měsíci

    Thank you for the course. I used to follow all of your courses on pluralsight. Is this channel your main source of content now?

    • @deborah_kurata
      @deborah_kurata  Před 10 měsíci +1

      I still have courses on Pluralsight. And I'm working on a new Pluralsight course now. But most of my new content will be via this channel.

  • @SachalChandio
    @SachalChandio Před 10 měsíci

    you are awesome

  • @krishnareddyyerram4615
    @krishnareddyyerram4615 Před měsícem

    Super

  • @mikaduchna1987
    @mikaduchna1987 Před 5 měsíci

    I was just wandering... why using signal with array in ngFor in this case? Isn't that useful where we have more dynamically changing list of values?

  • @im4555
    @im4555 Před rokem

    Thanks very much Deborah for these tutorials - I have one quick question if you don't mind: Is exPrice recomputed on the change to its dependent signals or when it is accessed by the template (which is re-rendered based on other signals)? Thanks!

    • @deborah_kurata
      @deborah_kurata  Před rokem

      Thank you for watching.
      Any computed is calculated the first time it's read. The value is then memorized and reused whenever it's read again.
      When any dependent signal changes, the next time the computed is read it is recalculated. That new value is then memorized and reused whenever it is read again.
      Is that what you were asking?

  • @sarathlalsaseendran
    @sarathlalsaseendran Před rokem

    Very nice video. I am expecting your full Angular course on Udemy from beginning to advanced. I am sure that will be 5 star rated most popular course in Udemy history.

    • @deborah_kurata
      @deborah_kurata  Před rokem +2

      Thank you ... but I was not able to get past Udemy's identification requirements. And I've never figured out how to contact an actual person about it. So I have not been able to create a Udemy account.
      Plus Pluralsight has non-compete agreements, so none of the Pluralsight content can be legally "copied" to other platforms.
      Pluralsight does plan on retiring my Angular courses sometime later this year (which negates the non-complete), and at that point I plan to post at least some of the content on this channel. Would that be useful?

    • @sarathlalsaseendran
      @sarathlalsaseendran Před rokem +1

      @@deborah_kurata That would be really useful. Thank you so much. 😍

  • @sourishdutta9600
    @sourishdutta9600 Před rokem

    Thank You so much, Mam, That was a very clear view of signals. I have one question How does it improves the changes detection strategy ?? Can you please make one video on this? Thank You.

    • @deborah_kurata
      @deborah_kurata  Před rokem +1

      Thank you for the kind words.
      Angular's current change detection uses zone.js. There are several issues with zone.js as outlined here: github.com/angular/angular/discussions/49684
      Here's a snippet from the link:
      "The Zone approach isn't scalable.
      Zone is based on monkey-patching platform APIs like setTimeout, Promise.then, and addEventListener. This lets Angular know when something has happened in the browser, and we can then schedule change detection to synchronize the UI with any potential model changes.
      This approach has not scaled well. zone.js must be loaded before the application starts in order to patch its target APIs. This patching operation is not free, both in terms of bytes downloaded and milliseconds of load time. zone.js also has no idea which APIs the application will use, and must patch them just in case. As browsers add more and more APIs, the cost of this patching grows, as does the cost of maintaining zone.js.
      Another major issue is that some platform APIs, such as async / await, are not monkey-patchable at all, requiring awkward workarounds or forced down-leveling.
      While we can work to optimize zone.js and reduce these costs, we will never be able to eliminate them completely.
      Zones are the root cause of many common pain points in Angular.
      In looking back at 7+ years of Angular history and feedback, we've identified zone.js as a common root cause behind many developer experience or performance challenges.
      The infamous ExpressionChangedAfterItHasBeenChecked error is often the result of violating Angular's assumptions of how data will flow in your application. Angular assumes that your data will flow from top to bottom along the view hierarchy. This assumption is rooted in how zone.js separates model updates from UI reconciliation, resulting in the potential for "unsafe" model updates.
      Another issue we've noted is that zone.js can easily overreact to activity in an application, resulting in many unnecessary change detections. Often this results from third-party advertising, marketing, or analytics scripts being initialized in a way that runs their many timers or other actions in the Angular zone. In the worst cases, we've seen applications which do over 1,000+ change detections at startup. It's always possible to write code with performance problems, but zone.js makes it easy to create such issues unintentionally.
      Developers are opting in to more fine-grained reactivity today
      Many developers today use state management patterns or libraries that architect their data in a way where they can tell Angular exactly what changed. This usually takes the form of making components OnPush and using Observables together with the async pipe to mark components for check when state they depend on changes. Angular is capable of operating in this mode, but still relies on zone.js for top-down change detection. Thus, developers get some, but not all of the benefits of fine-grained reactivity, and still have to deal with the drawbacks of zone.js."

    • @sourishdutta9600
      @sourishdutta9600 Před rokem +1

      @@deborah_kurata Thanks Mam, for your reply I will go through it, What great timing .. Angular team also running live on youtube about the Signal RFC. 🙂 Thank You

  • @havefun5519
    @havefun5519 Před rokem

    In the same component, The function/requirement could be implemented via existing API only the constructor can't be notified of the update for the variables? Hope for more videos. Thanks.

    • @deborah_kurata
      @deborah_kurata  Před rokem

      Could you elaborate? I'm unclear on your question.

  • @vaibhavchawla2439
    @vaibhavchawla2439 Před 11 měsíci

    Hi Deborah, as always thank you for the detailed explaination. It is always a pleasure to listen to you.
    However I have a question which isn't related to signal.
    At @20:01 at line number 14 you used $any(event.target).value. What does this expression specifically $any part means ?

    • @deborah_kurata
      @deborah_kurata  Před 11 měsíci

      Thank you for the kind words.
      The $any requirement is a bit new, starting when Angular defaulted to strict typing throughout.
      You can find out more about $any here: angular.io/guide/template-typecheck#troubleshooting-template-errors
      It basically says: "Sometimes a binding expression triggers a type error during AOT compilation and it is not possible or difficult to fully specify the type." and "Use the $any() type-cast function in certain contexts to opt out of type-checking for a part of the expression".
      This basically generates: (event.target as any).value
      By casting it to "any", we can access its .value without a type error.
      Does that help?

    • @vaibhavchawla2439
      @vaibhavchawla2439 Před 11 měsíci +1

      @@deborah_kurata Thank you very much for the explanation. It is something new that I discovered. 😃😃

  • @MrKYT-gb8gs
    @MrKYT-gb8gs Před rokem

    I had to use a differ to detect change in an object (dictionary) type variable. Does signal detect change in object without extra bits of code?

    • @deborah_kurata
      @deborah_kurata  Před rokem

      You shouldn't need extra code. Could you do a stackblitz to demo your scenario?

  • @dozadetrezire7455
    @dozadetrezire7455 Před 4 měsíci

    In Angular 17, the mutate method doesnt work anymore. What's the alternative for it in Angular 17?

    • @deborah_kurata
      @deborah_kurata  Před 4 měsíci

      Correct. Now you can use the update method instead. I have some examples here: czcams.com/video/wcn_8UnYBEw/video.html

  • @AnthonyDev
    @AnthonyDev Před rokem

    My favorite Angular teacher. ❤
    Hey Deborah, what about manage async signals states? Like state is loading, state is success or state has error? Example you want update a vehicle price but to know some discount you need to call a http get.

    • @deborah_kurata
      @deborah_kurata  Před rokem +1

      Thank you! ☺
      Have you seen this video: czcams.com/video/5SD995zKvbk/video.html
      Does it answer your question?

    • @AnthonyDev
      @AnthonyDev Před rokem

      @@deborah_kurata I just watched it! Great explanation and the final code is clear and cleaner. Thanks.

  • @MostafaMohamed-uw4lf
    @MostafaMohamed-uw4lf Před 8 měsíci

    you are so talented,
    awesome explaination, thanks so much.
    do you have courses for design pattern / algorithm / data structure?

    • @deborah_kurata
      @deborah_kurata  Před 7 měsíci

      Thank you so much!
      I had given thought to doing content on data structures, but I wasn't sure how much interest there would be in those topics.
      Do you have specific topics you'd like to see?

    • @MostafaMohamed-uw4lf
      @MostafaMohamed-uw4lf Před 4 měsíci

      i am not sure, but i believe it would be amazing
      1. data structure and algorithm.
      2.design pattern.

  • @vidyas1545
    @vidyas1545 Před rokem

    Hi Deborah , I see signals to be so similar to behavior subjects !! Does this mean Angular is eventually trying to get rid of zone.js?

  • @erfanfarhadi
    @erfanfarhadi Před rokem

    Hi Deborah
    thank you for your wonderful video
    there is a misunderstanding for me about the update and mutate
    could you describe what is difference between update and mutate?

    • @deborah_kurata
      @deborah_kurata  Před rokem

      Update changes the signal itself.
      In this example we are removing the 5 from the signal and replacing it with a 10.
      counter = signal(5);
      constructor() {
      this.counter.update((value) => value * 2);
      }
      The mutate changes one of the signal elements or properties without changing the signal itself.
      In this example, we aren't replacing the signal. It's still an array of 6 numbers. Instead, we are mutating the first element of the array and changing it to 100.
      numbers = signal([0, 1,2,3,4,5]);
      constructor() {
      this.numbers.mutate(value => value[0] = 100);
      }
      Note that in most cases, you can achieve the same result of the mutate with an update if you want to replace the entire array.
      The following code achieves the same as the mutate shown above:
      this.numbers.update((value) => [100, ...value])
      But it marks the entire array as changed instead of just one array element. How that might affect change detection is not clear at this point because the Angular team has not yet implemented specialized change detection for signals.

    • @erfanfarhadi
      @erfanfarhadi Před rokem

      @@deborah_kurata Thank you for your valuable response.
      The earth needs people like you☘️

  • @moegreen8543
    @moegreen8543 Před 6 měsíci

    Are there already any standards (generally accepted rules) for writing variable names for signals?

    • @deborah_kurata
      @deborah_kurata  Před 5 měsíci

      There have been some discussions about this. I have not seen any generally accepted rule, however.
      Some devs have been using a suffix (such as countSig), which personally I don't care for. Reminds me of the old Hungarian notation.
      Some devs have been prefixing it with a $, so $count. Personally, I don't really care for that either. But some developers have found this useful.
      Someone even suggested double $$, so count$$, which I think could be very confusing. :-)

  • @danielchirinosr
    @danielchirinosr Před rokem

    hi Deborah, how can I update a signal from another component?

    • @deborah_kurata
      @deborah_kurata  Před rokem +1

      Move the signal to a service, inject the service, and then it can be updated from any component.

  • @MohamedHassan-hk6dh
    @MohamedHassan-hk6dh Před 4 měsíci

    could you make a video about input signal with data from the server ? and thanks in advance

    • @deborah_kurata
      @deborah_kurata  Před 4 měsíci +1

      The purpose of a "signal input" is to pass data from a child component to a parent component. Or do you mean a signal set of data retrieved from the server?
      If you mean the later, I have several videos on using Angular signals with RxJS (to retrieve data from the server). Consider starting with this one: czcams.com/video/MQwn1cGJ5z0/video.html

  • @timothyasigbey3304
    @timothyasigbey3304 Před 11 měsíci

    It looks more like mobx is there any possible use case to use signals with ngrx. Nice video by the way. Well explained.

    • @deborah_kurata
      @deborah_kurata  Před 10 měsíci +1

      Check this out: dev.to/ngrx/announcing-ngrx-v16-integration-with-angular-signals-functional-effects-standalone-schematics-and-more-5gk6

    • @timothyasigbey3304
      @timothyasigbey3304 Před 10 měsíci +1

      thank you@@deborah_kurata

  • @NishvanthD
    @NishvanthD Před měsícem

    If i used the signal getter directly in the template will it leads to multiple calls in angular ?.//we should avoid calling methods/getter from our template because the method will be called every time change detection runs right ?

    • @deborah_kurata
      @deborah_kurata  Před měsícem +1

      The signal getters are no different from accessing a normal property value. The general rule of not calling methods/getters from the template was primarily to prevent running code within the getter or method. For a signal getter, we can't add any code. If we use a computed signal to add some code, then the value is memoized, so it isn't re-executed/recalculated unless the related data changes.
      The Angular team sees signals as the future of very efficient change detection, so I'm sure they've worked diligently to ensure the signal getters are efficient.
      Does that answer the question?

    • @NishvanthD
      @NishvanthD Před měsícem +1

      @@deborah_kurata Thankyou Very much

  • @celikart
    @celikart Před rokem

    Hi Deborah, thank you so much for sharing. I have few questions;
    what about unsubscrıbing?
    Does ıt keep lıstening always:
    when to use sıgnal or observable (RxJs)?
    why Signal came up , because of less syntax?

    • @deborah_kurata
      @deborah_kurata  Před rokem

      There is no "subscribe", so no need to "unsubscribe". The component signals will keep listening until the component is destroyed. If the signal is in a service, the service will keep listening until that service's injector is destroyed.
      Signals are primarily for managing change detection for the UI. So here's the flow:
      - User kicks off an operation (such as selecting a customer from a list).
      - Action is processed in an event handler (like it is now), something like onCustomerSelected() that is called via event binding in the template.
      - The action may kick off an async process in a service, such as retrieving data based on that Id. That will continue to be done with RxJS/Observables.
      - The resulting data could be returned from the service as a signal.
      - The signal is bound to the UI, so the data appears to the user.
      The only real difference from what we do now is that instead of the service returning an Observable, it could return a Signal. That could be bound directly in the UI instead of needing an async pipe.
      The first part of the video attempts to explain why ... to provide more reactive programming (computed() for example) and to provide improved change detection.
      Does that answer the questions?

  • @jitheshkramesh
    @jitheshkramesh Před 6 měsíci

    Thanks for the tutorial. Once the page gets forcefully refreshed (F5), all the signal/subject values are getting cleared. How to fix this ? . Please help.

    • @deborah_kurata
      @deborah_kurata  Před 6 měsíci

      A refresh reloads the entire application and all of its internal state. There is no way to prevent that.
      If you need to retain the values on a reload, you need to write the values out to somewhere (a backend server or local storage) and then re-read the values in when the application is reloaded.

    • @jitheshkramesh
      @jitheshkramesh Před 6 měsíci

      @@deborah_kurata when I tried to update Signal at effect getting error message like this. please suggest. Writing to signals is not allowed in a `computed` or an `effect` by default. Use `allowSignalWrites` in the `CreateEffectOptions` to enable this inside effects.

    • @deborah_kurata
      @deborah_kurata  Před 3 měsíci

      Yeah, the recommended practice is to not update a signal in an effect because it could potentially cause an infinite loop. If you really need to, you can do exactly as the error message says and use the effect options to set allowSignalWrites.

  • @alexle7895
    @alexle7895 Před rokem

    Would Signals replace NgRx, or it is a completely different feature?

    • @deborah_kurata
      @deborah_kurata  Před rokem

      Signals are completely different from NgRx. Though NgRx has been modified to take advantage of the new signals features.
      See this: dev.to/this-is-angular/signals-what-this-means-for-ngrx-eho

  • @kudorgyozo
    @kudorgyozo Před 3 měsíci +1

    what's the difference between update and set?

    • @deborah_kurata
      @deborah_kurata  Před 3 měsíci +1

      Set just assigns a new value.
      this.filterSignal.set(newFilter);
      Update gives you the existing value, so you can manipulate it.
      this.filterSignal.update(currentFilter => currentFilter.toLocalLowerCase());
      Did that help answer the question?

  • @thedacian123
    @thedacian123 Před rokem

    What's happend woth RX and subscriber/observables then,Are Angular team going to get rid of them?

    • @deborah_kurata
      @deborah_kurata  Před rokem +3

      Signals are synchronous and primarily for keeping our UI updated with changes to data in our component.
      RxJS/Observables are for asynchronous operations, such as retrieving data via http. That won't change and won't go away.
      There will be methods such as fromObservable() that will take an Observable and convert it to a signal for display in the UI.
      You can think of it more like that signals will replace the async pipe. Like the async pipe, the fromObservable() will automatically subscribe/unsubscribe to the Observable.
      Does that answer the question?

  • @mugatu2017
    @mugatu2017 Před rokem

    thanks, what about the new life cycle hooks?

    • @deborah_kurata
      @deborah_kurata  Před rokem +1

      I didn't cover them yet because AFAIK, they aren't all implemented yet. They are still in RFC (Request for Comment) stage.
      You can find out more about the proposed lifecycle changes here: github.com/angular/angular/discussions/49682 under the topic of "Component lifecycle and effects"
      NOTE: I *did* cover `effect()` in the video which is also discussed in this section.
      NOTE: Even though all of the lifecycle hooks are shown in the above referenced document as functions within the constructor, many of them can be defined declaratively as shown with the `effect()` in this video.

    • @mugatu2017
      @mugatu2017 Před rokem +1

      @@deborah_kurata thanks Debora!!

  • @DoubleRhonRhon
    @DoubleRhonRhon Před rokem

    Hi, thank you . i dont't get why only the last of the 3 '.set(value)' is detected by the effect.

    • @deborah_kurata
      @deborah_kurata  Před rokem

      JavaScript/TypeScript is single threaded. Only one set of code can run at a time.
      When the event handler code is running, it will continue running until the end. Since all of the event handler code ran *before* the effect code runs, the current value is the last value that was set.
      When the event handler code execution is complete, other code (such as the effect) can run. The effect is notified that a signal has changed, but is not *given* that changed value. Rather, when the effect executes, it reads the current value from the signal itself.
      Did that help?

    • @DoubleRhonRhon
      @DoubleRhonRhon Před rokem

      @@deborah_kurata Ok but i really thought that using 'set', 'update' or 'mutate' would trigger the effect prior (or parallel) to the next line of code. It would be totally reactive in this way. What do you mean by the 'event handler code' : a function called next to the trigger of an event, or a general javascript mechanism ?

    • @deborah_kurata
      @deborah_kurata  Před rokem +1

      Since JavaScript is single threaded, it will finish executing any code in a function before it runs anything on the "callback queue".
      By "event handler code", I mean this:
      onQuantitySelected(qty: number) {
      this.quantity.set(qty);
      // Does not "emit" values, rather updates the value in the "box"
      // The qtyEff effect will not be called until the next tick
      // It only displays the latest value.
      this.quantity.set(5);
      this.quantity.set(42);
      }

    • @deborah_kurata
      @deborah_kurata  Před rokem

      I found a cool JavaScript flow visualizer here: latentflip.com/loupe
      Try it out. Try changing the "on" event handler to include code like this:
      $.on('button', 'click', function onClick() {
      setTimeout(function timer() {
      console.log('You clicked the button!');
      }, 500);
      for (let x = 0; x < 10; x++) {
      console.log(x);
      }
      });
      You'll see it run through and queue up the setTimeout until the loop at the bottom is finished. *THEN* it will run the callback within the setTimeout and display "You clicked the button!".
      An effect() is run similarly.
      Let me know if you found that visualizer useful.

    • @DoubleRhonRhon
      @DoubleRhonRhon Před rokem +1

      @@deborah_kurata Ok it displays "you clicked the button!" if we open the console. I searched for it on the web page. i have to keep in mind the "callback queue". Thank you again

  • @mansoorabdullah
    @mansoorabdullah Před rokem +1

    2:12 the computation should be,
    exPrice = price * qty
    not
    exPrice = price * quantity

    • @deborah_kurata
      @deborah_kurata  Před rokem

      Yep. You are correct. Thanks for pointing that out!
      AFAIK, there is no way to edit a YT video once it's been posted. But I can add it to the video notes.
      Thanks again!

    • @mansoorabdullah
      @mansoorabdullah Před rokem

      @@deborah_kurata Yes, you can edit a CZcams video that you have uploaded, as long as you are signed in to your CZcams account. Here are the steps to edit your video:
      Sign in to your CZcams account and go to your channel's Video Manager.
      Find the video that you want to edit and click on the Edit button.
      You will be taken to the Video Editor, where you can trim, split, add or remove sections, add music, and make other changes to your video.
      After you have made your edits, click on the Save button to save the changes.
      Once you have saved the changes, the edited video will be processed and replaced on CZcams. Please note that the video URL and statistics associated with the video will remain the same.
      It's important to note that if your video has already been monetized, re-uploading an edited version may affect your monetization status. Also, if the video has been live for a while and has accumulated views, editing it may affect its search rankings and visibility. So, it's a good idea to carefully consider the changes you want to make before editing a video that has already been published.

    • @deborah_kurata
      @deborah_kurata  Před rokem

      I see options to:
      - Trim & Cut
      - Blur
      - Audio
      - End screen
      - Info cards
      I don't see any option to actually *add* anything. So it looks like I could cut out the error, but not replace it with a correction. AFAIK, I can't even add a callout pointing to the typo.
      Since this error really doesn't impact the training in the video on signals, it doesn't seem worth trying to fix it. I did add it to a NOTE in the description.
      Thanks!

  • @FredYang
    @FredYang Před 7 měsíci

    This video shows What and How, but not why. All the example shows here can be replaced with plain out javascript object. How does it improve change detection? Can we remove zone.js with Signal? I didn't see it the demo here.

    • @deborah_kurata
      @deborah_kurata  Před 7 měsíci

      The why:
      - Signals provide reactivity. Using computed signals, a value can react to changes in its dependent signals. This allows you to build a shopping cart, for example, that automatically recalculates the extended price, subtotal, taxes, delivery fees, and so on. This makes it much easier to have data react to changes in other data in your application. This functionality could *not* easily be replaced with a plain old JavaScript object. You'd have to build a bunch of setters.
      - Signals currently provide improved change detection using OnPush. They *will* (in the future) provide for zone-less change detection. But I didn't demo that because that feature is not yet implemented.

  • @pashabolokhov
    @pashabolokhov Před 8 měsíci

    Singular Angles

  • @olivierboisse1678
    @olivierboisse1678 Před 2 měsíci

    9:58 this is not true. Signals will only notify its LIVE consumers (i.e. component templates or effects). For others situations the link between producer and consumer is owned by the consumer, thus the consumer value will be updated the next time it is read, not when the producer changes its value.

  • @daniilevsienko4060
    @daniilevsienko4060 Před rokem

    Thank you for the video! If we have sequentially this.quantity.set(5) and this.quantity(42) czcams.com/video/oqYQG7QMdzw/video.html why don't effect() display intermediate value? Is there an internal timer?

    • @deborah_kurata
      @deborah_kurata  Před rokem

      Thank you for watching!
      JavaScript is single threaded. It won't execute the effect code until the prior code block that sets the quantity is complete. Then when the effect does run, reading the signal *only* reads the current value, not any prior value.

    • @daniilevsienko4060
      @daniilevsienko4060 Před rokem +1

      @@deborah_kurata I see, thank you! Sorry for stupid question:)

    • @deborah_kurata
      @deborah_kurata  Před rokem +1

      @@daniilevsienko4060 No problem. And, as they say, there are no stupid questions! 🙂

  • @zoltarianie
    @zoltarianie Před rokem

    stop buying comments!!!

  • @hansschenker
    @hansschenker Před rokem

    What: What motivates an RxJs expert to change to Signals?
    Why: Why does an RxJs expert exchange a powerful technology like Rxjs with just a getter/setter function what Signals really are?
    How: How can an RxJs expert be convinced to give away his swiss army knife for a hammer?

    • @deborah_kurata
      @deborah_kurata  Před rokem +3

      Not sure what I said that gave you that impression? I have no plans to give up RxJS and Observables. You'll have to pry them from my cold, dead hands. 😀
      Signals are for sync operations. We are exchanging the async pipe with a bound signal. Anything async (like http requests and complex data manipulation) will still be RxJS.
      I didn't include the RxJS/Observables in this video because the `fromObservable` and `fromSignal` needed to display the Observable values in the UI aren't yet in place. I did get a "fake" version of those methods and have an example of signals with RxJS here: stackblitz.com/edit/angular-y9goji
      I plan to turn the above linked example into a separate video as soon as the `fromObservable` and `fromSignal` features are available in the v16 preview.