following angular documentation for basic concepts