I've tried both on a side project I've been noodling with for most of the year.<p>What I liked about Knockout is that it was very quick to get started and it did what it said it would do on the tin. The documentation was fairly straightforward, unlike than the markov chain generator stuff that is passed off as documentation by the AngularJS crew.<p>However, Knockout's technique for watching state requires you to wrap everything of interest. The actual model becomes thoroughly comingled with calls to ko.observable( yourVariableOfInterest ), often in multiple places in the call stack when KO fails to follow the flow of execution.<p>And this spreads into your testing too. You can't just test your own model in isolation, you have to bring KO along for the ride.<p>I reached a high-water mark and decided to move off Knockout onto something else.<p>AngularJS was shiny and trendy, the tutorial impressive, so foolishly I switched.<p>Angular at least allows me to leave my model code largely unannotated. I recently radically refactored the model code and I only needed small changes on the Angular bits. The Angular method is that you build a mapping between your own model and what Angular knows about. So instead of your <i>own</i> code being comingled with Angular annotations, you have your own code in one place and the Angular mappings in another place (in a Controller with $scope.variableOfInterest = model.yourVariableOfInterest).<p>On the downside, Angular's documentation is <i>notoriously terrible</i>. I was at a tech interview last week at a place which uses Angular, and everything about Angular that has stumped me has stumped teams of people who are better than me. And just like me, they spend more time reading the Angular code to explain the docs than relying on the docs.<p>I think that for CRUD apps with swooshiness, Angular is great. And that's what the tutorial shows. But for more difficult applications the documentation and weak tooling is very frustrating indeed.