code: function queueLifecycleHooks(flags, tView) {
      if (tView.firstTemplatePass) {
          var start = flags >> 14 /* DirectiveStartingIndexShift */;
          var count = flags & 4095 /* DirectiveCountMask */;
          var end = start + count;
          // It's necessary to loop through the directives at elementEnd() (rather than processing in
          // directiveCreate) so we can preserve the current hook order. Content, view, and destroy
          // hooks for projected components and directives must be called *before* their hosts.
          for (var i = start; i < end; i++) {
              var def = tView.directives[i];
              queueContentHooks(def, tView, i);
              queueViewHooks(def, tView, i);
              queueDestroyHooks(def, tView, i);
          }
      }
  }
docs: Loops through the directives on a node and queues all their hooks except ngOnInit
  and ngDoCheck, which are queued separately in directiveCreate.