Wilson Mendes
@willmendesneto
Google Developer Expert Web technologies
Angular modules
Let’s have #ngFun!
So, let's start?
HI, IT'S ME
<webapps/> are evolving
or moving from AngularJS to Angular
Share components is ❤️
<ItemsList />
<About />
<Gallery />
...
<page1>
</page1>
<component1 />
<component2>
</component2>
<component3 />
bundle
test
publish
lint
Opinions ?
reporter
dev server
types
coverage
npm install -g @angular/cli
// Installing Angular CLI
ng new my-app
// Creating a new Angular App
ng serve
// Starting local server
We have several options
What if the app
doesn't need
all of that?
structure of a page
<page1>
</page1>
<component1 />
<component2>
</component2>
<component3 />
<page1>
</page1>
<component1 />
<component2>
</component2>
<component3 />
small scope
boundaries
plug-and-play
Everything is a component
Integration in your module
Easy to maintain
Refactor across teams
Why small packages
Let's start the #ngFun
Let's start a project!
🎉🎉🎉🎉🎉🎉🎉🎉🎉
#1 - NGX Page Click
Avoid bubbling
Declarative API
Component
Easy to integrate
Small package
Decoupled
#NG Why?
...
import {
NgxPageClickModule
} from 'ngx-page-click';
...
@NgModule({
...
imports: [NgxPageClickModule],
...
})
export class AppModule { }
<ngx-page-click
[disabled]="disabled"
[outsideClickHandler]="outsideClickHandler"
[listenTo]="on"
>
<div><p>Content goes here</p></div>
</ngx-page-click>
#2 - NGX Feature Toggle
Feature config
Routing Guards
Component
Third-parties
SSR Ready
Directive
#NG Why?
...
import {
FeatureToggleModule
} from 'ngx-feature-toggle';
...
@NgModule({
...
imports: [FeatureToggleModule],
...
})
export class AppModule { }
<!--
const features = {
enableDescription: true
}
-->
<feature-toggle-provider [features]="features">
<div *featureToggle="'enableDescription'">
<p>condition is `true`</p>
<p>this content will be displayed.</p>
</div>
<div *featureToggle="'!enableDescription'">
<p>condition is `false`</p>
<p>this content will be displayed.</p>
</div>
</feature-toggle-provider>
import {
Routes, RouterModule
} from '@angular/router';
import {
FeatureToggleModule,
NgxFeatureToggleCanLoadGuard,
} from 'ngx-feature-toggle';
...
// Using route guards in application
const routes: Routes = [
{
path: 'playground',
component: PlaygroundComponent,
canLoad: [NgxFeatureToggleCanLoadGuard],
data: {
featureToggle: ['enablePlayground'],
}
},
];
But this is "simple", let's build something really cool!
#3 - NGX Skeleton Loader
UX Improve
Declarative API
Plug-and-play
Accessibility
Animations
Themes
#NG Why?
...
import {
NgxSkeletonLoaderModule
} from 'ngx-skeleton-loader';
...
@NgModule({
...
imports: [NgxSkeletonLoaderModule],
...
})
export class AppModule { }
<ngx-skeleton-loader
count="5"
[theme]="{
'border-radius': '5px',
height: '50px'
}"
>
</ngx-skeleton-loader>
How to integrate accessibility in a Skeleton?
Web ARIA Attributes
...
aria-valuemax="100"
aria-valuemin="0"
aria-valuetext="Loading..."
role="progressbar"
...
Web ARIA Attributes
attributes for assistive tech
Combine states and a11y
Available in the package
Web ARIA Attributes
...
.skeleton-loader {
&.progress {
/* ...css animation for progress */
}
@media (prefers-reduced-motion: reduce) {
/* ...removing css animation */
&.progress {
background-image: none;
}
}
}
prefers-reduced-motion
What about dark mode ?
<!-- Uses `progress-dark` as animation -->
<ngx-skeleton-loader
animation="progress-dark"
count="3"
>
</ngx-skeleton-loader>
Dark-mode usage
What if I need to create a new theme for skeletons in my app?
<ngx-skeleton-loader
count="5"
[theme]="{
'border-radius': '5px',
height: '50px',
'background-color': '#992929',
border: '1px solid white'
}"
></ngx-skeleton-loader>
Theme via @Input()
/*
* You can find more details about `:host`
* at Angular Component Style Docs
* https://angular.io/guide/component-styles#host
*/
:host >>> ngx-skeleton-loader .skeleton-loader {
border-radius: 5px;
height: 50px;
background-color: #992929;
border: 1px solid white;
}
Theme via css
<ngx-recap/>
Have fun and learn with it
Start with small components
Make a plan, keep working on it
Web platform is in your favour
Sharing is caring. OSS ❤️
Thank you 👋
Wilson Mendes
@willmendesneto
Google Developer Expert Web technologies
Angular modules: Let’s have #ngFun!
By willmendesneto
Angular modules: Let’s have #ngFun!
Remember your first time with Angular? A lot of fun, right? We all know that components are the best way to share your code across web apps, but why it’s so hard to find a package that solves our problem nowadays? Skeleton components, a component that copies the page content to the clipboard, page scroll locker or even some ideas you have can be helpful for everyone! In this talk we will learn how to contribute to the NG-Ecosystem sharing your components, experiments and how to improve and how to bring back all that fun we had with Angular.
- 2,906