Skip to content

Instantly share code, notes, and snippets.

View navix's full-sized avatar
❄️
Coding smart ;)

Oleksa Novyk navix

❄️
Coding smart ;)
View GitHub Profile
@navix
navix / readme.md
Last active December 29, 2018 08:52
Add ControlValueAccessor to component in Angular 7

Add ControlValueAccessor to component in Angular 7

ControlValueAccessor allows your component interacts with ngModel.

Let's create a custom quantity input.

Add NG_VALUE_ACCESSOR provider that points to component itself and implement ControlValueAccessor interface:

import { Component, forwardRef } from '@angular/core';
@navix
navix / content.md
Last active December 25, 2018 10:11
Custom EventManagerPlugin for Angular 7

Custom EventManagerPlugin for Angular 7

In Angular we can extend the events binding syntax. Let's add posibility to log an event before firing a handler.

Create custom event plugin:

import { Injectable } from '@angular/core';
import { EventManager, ɵgetDOM as getDOM } from '@angular/platform-browser';
@navix
navix / content.md
Last active July 8, 2019 11:30
Component with popup using Angular CDK

Component with popup using Angular CDK Overlay

Template:

<ng-template #templateRef>
  Popup content
</ng-template>
@navix
navix / content.md
Last active December 19, 2018 14:55
Ngx-kit ext-select — extended select for Angular
@navix
navix / readme.md
Last active July 20, 2019 09:35
Image resizing in browser

Image resizing in browser

Resize image using canvas:

function resizeImage (src, resultWidth, resultHeight): Promise<string> {
  return new Promise<string>((resolve, reject) => {
    let canvas = document.createElement('canvas');
    let img = document.createElement('img');
    img.onload = function () {
@navix
navix / readme.md
Last active December 19, 2018 13:54

RxJS: finalCheck operator

Operator that will be runned on stream completition and throw error if callback return something.

Reason: finalize operator cannot pass error to a stream.

const finalCheck = (checkFn: () => any) => <T>(source: Observable<T>) =>
  new Observable<T>(observer => {
 return source.subscribe({
import { Injectable, OnDestroy } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { timer } from 'rxjs/observable/timer';
import { shareReplay, switchMap, map } from 'rxjs/operators';
export interface Joke {
id: number;
joke: string;
categories: Array<string>;

Angular Universal (Webpack bundle + Docker deploy)

Tested with angular@5.

Install deps

npm i @angular/platform-server @nguniversal/express-engine @nguniversal/module-map-ngfactory-loader express @types/express ts-loader@3 rimraf --save-dev

Update src/app/app.module.ts

Gradient shadow in pure CSS

alt text

HTML
<button>Let's Go !</button>