Angular may be useful for getting large-scale projects up and running in a relatively short timespan, but the issue is it can contravene various established web standards and best practices:
- “ng-*” attributes are not valid against any existing HTML spec. One can resolve this by converting them to data attributes (i.e. “data-ng-*”), but then this should surely be the only option, and this approach should be better highlighted to developers
- Accessibility — again, Angular does at least provide a workaround (ngAria), but according to the docs this “quietly injects accessibility support” and “most of what ngAria does is only visible under the hood.” This makes me apprehensive as web accessibility is not that straightforward; specifying aria attributes is usually very customised and takes careful consideration. Why should I trust some third-party script to handle something that the browser already handles?
- Hashbang URLs — again, can be configured for browsers with HTML5 support, but it’s annoying that this is the default: http://www.webmonkey.com/2011/02/gawker-learns-the-hard-way-why-hash-bang-urls-are-evil/
Personally I prefer the option of breaking down large-scale frontend apps into separate applications, sometimes served by Node.js-based microservices; this decouples the various parts of frontend as it makes some independently upgradable and releasable. I see Angular having its benefits when used pragmatically, but given my past experience with it I’d rather use something like React and Flux, which seemingly allows me to specify my HTML as I’d please; otherwise, I’ll just use vanilla JS as I can at least write a very customised solution that directly targets my needs.
I can see why Angular is enticing to someone from a Silverlight/WPF background; I would know. It’s just that true web development is a different kettle of fish; we’re talking representation of information vs. traditional UI development.