My setup at the moment looks like this:
local cwd = vim.fn.getcwd()
local project_library_path = cwd .. "/node_modules"
local cmd = {
    DATA_PATH .. "/lsp_servers/angularls/node_modules/@angular/language-server/bin/ngserver",
    "--ngProbeLocations",
    project_library_path,
    "--tsProbeLocations",
    project_library_path ,
    "--stdio",
}
require'lspconfig'.angularls.setup{
    cmd = cmd,
    on_new_config = function(new_config, new_root_dir)
        new_config.cmd = cmd
    end
}
On :LspInfo, I can see that the cmd is executable, but somehow it doesn't attach.
I have difficulty to differentiate @angular/language-server from @angular/language-service...
I am not sure what the tsProbeLocations and ngProbeLocations do and if my path is correct.
Finally, I red from Angular Language Service website and there isn't a good guideline for neovim. (except for coc-angular, but I don't use coc.)
 
     
     
    