(by @andrestaltz)
If you prefer to watch video tutorials with live-coding, then check out this series I recorded with the same contents as in this article: Egghead.io - Introduction to Reactive Programming.
(by @andrestaltz)
If you prefer to watch video tutorials with live-coding, then check out this series I recorded with the same contents as in this article: Egghead.io - Introduction to Reactive Programming.
<environment names="Development"> | |
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" /> | |
<link rel="stylesheet" href="~/css/site.css" /> | |
</environment> | |
<environment names="Staging,Production"> | |
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css" | |
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css" | |
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" /> | |
<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" /> | |
</environment> |
If you build real business applications, then you know most of your development effort goes into forms. AngularJS struck me right away as an amazing improvement over the previous generation of HTML libraries, simply because model binding was really well done. Integrating binding with validation made it a first-class web framework.
Business applications of any moderate complexity often have reusable user controls and AngularJS directives were great for that purpose. AngularJS had this amazing feature, whereby placing an ng-form
inside of another ng-form
the state of the child form was automatically reflected in the parent! You could build up directives with their own validation completely independent of what page they belonged to. Simply by dropping them on your page, all of your validation was auto-wired up. Brilliant!
It is a little surprising, then, that Angular2 did not follow in
public class AsyncLazyPipeline<TSource> | |
{ | |
private Func<Task<TSource>> Expression { get; } | |
public AsyncLazyPipeline(Func<Task<TSource>> expression) | |
{ | |
Expression = expression; | |
} | |
public Task<TSource> Flatten() => Expression(); |
[Options] | |
ThemeIndex=3 | |
Language=en-US | |
Font1=Consolas | |
Font2=Consolas | |
Size1=11 | |
Size2=10 | |
Scroll=1 | |
Interface=2 | |
Reset=0 |