Я сам делал дерево. Вся фишка в том, что тебе нужно построить плоское дерево и с ним работать. Динамическую погрузку можешь сделать, просто нужно обновлять плоское дерево. Ну и с днд был геморрой, пришлось все функции для дропа самим реализовывать. Можешь использовать флет трии из материала. Я так понял, что в ангуляре с такими компонентами вообще глухо. В реакте или вуе уже куча готовых и красивых решений.
в ангуляре не только материал, есть еще бутстрап и куча другик либ, в которых можно найти подходящее решение и также можно использовать обертки для js либ (пример swiper.js -> ngx-swiper)