angular-breakpoints
is a little angular service to listen programmatically to breakpoints.
It works with RxJS
.
npm install angular-breakpoints --save
jspm install angular-breakpoints=npm:angular-breakpoints
First you need to import the breakpointsProvider
function and expose it in the providers array (or in bootstrap).
import { breakpointsProvider, BreakpointsService, BreakpointEvent } from 'angular-breakpoints';
@Component({
// ...
providers: [breakpointsProvider()]
// ...
})
export class YourComponent {
constructor (private breakpointsService: BreakpointsService) {
this.breakpointsService.changes.subscribe((event: BreakpointEvent) => {
console.log(event);
});
}
}
The changes
property is an instance of RxJS Observable
. It will gives you the initial value when you subscribe to it.
name
: name of the breakpointbreakpoint
: value of the breakpoint (min and max)currentSize
: the current size of the window (width and height)
The defaults breakpoints are the Twitter Bootstrap
breakpoints.
const defaultBreakpoints: BreakpointConfig = {
xs: { max: 768 },
sm: { min: 768, max: 992 },
md: { min: 992, max: 1200 },
lg: { min: 1200 }
};
You can customize the breakpoints by passing a BreakpointConfig
interface in the breakpointsProvider
.
To match a breakpoint, the size must be greater or equal than the minimum and less than the maximum (not less or equal).
const breakpointConfig: BreakpointConfig = {
xss: { max: 400 },
xs: { min: 400, max: 768 },
sm: { min: 768, max: 992 },
md: { min: 992, max: 1200 },
lgs: { min: 1200, max: 1500 },
lg: { min: 1500 }
}
// ...
providers: [breakpointsProvider(breakpointConfig)]
// ...
The service subscribes to the resize event when created.
If you want to temporarily unsubscribe to the resize event, just call the unsubscribe
method.
If you want to resubscribe, call the subscribe
method.
The methods exist but the resize event does not run in NgZone
so it will not trigger change detection.
Thus, the performance should not be affected.