AngularStrap - Bootstrap directives for AngularJS
mgcrea.github.com
mgcrea.github.com
<a ng-click="modal.saved=true;dismiss()">...</a>
is any different to <a onClick="thisIsAnAntiPattern()">...</a>
I'm all for declarative code but isn't stuffing javascript in html attributes something we learnt not to do about 10 years ago? Why the resurgence? <a ng-click="modal.saved=true;dismiss()">...</a>
and <a onClick="thisIsAnAntiPattern()">...</a>
and why context / scope matters could be found here: http://www.bennadel.com/blog/2439-My-Experience-With-Angular...Your HTML has to be hooked up to your controller somehow, I personally prefer angular's declarative approach rather than a big messy init method.
That's the case, for me anyway.
As a side point, you can't evaluate arbitrary JavaScript in Angular attributes. Angular parses the attributes and evaluates them as in a JavaScript-like way, but with some exceptions. See http://docs.angularjs.org/guide/expression
More things change, more they remain the same.
PS: I am not saying JS in attributes is a good thing, but just that these things keep happening, for good or worse.
And why?
The popovers allowing external templates and custom scopes is one example, and the inclusion of navbars, date and time pickers instead of pagination, accordions and carousels is another.
If it works, I'd say I like it more than Angular UI's version, which is probably simpler to get up and running but something that you'd run into the limits of more quickly.
The main difference between the two seems to be how they handle templates. UI Bootstrap has a set of default templates that can be overwritten, whereas AngularStrap doesn't. AngularStrap also includes date/time picker directives.
All three of them (angular-ui, ui.bootstrap, angular-strap) have been a pleasure to work with.
The (official) AngularUI project has a much better solution (as has already been linked to in previous comments, but I feel the need to re-iterate): http://angular-ui.github.com/bootstrap/
Can you show us how they're wrong?
1) Size and dependencies. Let's say you want to use buttons directive. If you decide to go with angular-ui/bootstrap you will need this https://github.com/angular-ui/bootstrap/blob/master/src/butt... only - 62 LOC. If you decide to go with Strap you will need jQuery + 100 LOC of Bootstrap's JavaScript + 163 LOC of Strap's wrapper (!!!). Please note that the the wrapper itself is _longer_ than the original version. Native version is 1/3 of the size (!).
2) Customization - try to change a template for say, a typeahead. With the strap solution it is hard-coded in Bootstrap's JavaScript, no way to customize. With angular-ui/bootstrap template is here: https://github.com/angular-ui/bootstrap/blob/master/template... and is fully customizable
3) Integration with the AngularJS ecosystem - since anngular-ui/bootstrap directives are native ones they seamlessly work with all the AngularJS goodies like $q promises. This means that you can provide a promise as a source for, say, typeahead or data for modal.
4) wrapping existing jQuery plugins is not always obvious as lifecycles are really different. As the results you need to do hacks - just search Strap's code for setTimeout and $timeout to see what I mean.
At the end of the day just choose a project that works for you but we've started angular-ui effort since we believe that native AngularJS directives offer much lighter and cleaner solution.
angular UI version https://github.com/angular-ui/bootstrap/blob/master/src/aler...
strap version https://github.com/mgcrea/angular-strap/blob/master/src/dire...
It's not neccessary (bootstrap HTML is pretty straightforward) and it prevent you from doing a lot of things like custom html inside dropdown menus (icons, ni-click, etc).
So IMO, It abstract the things at the wrong level (too high)
I actually haven't thought of using it for static pages but that poses an interesting experiment to try with my blog. It could bridge the gap often seen with non-interactive pages - mainly caching on S3+CF and yet wanting to pull in a Twitter feed.
Some things to mull on for sure.