Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

angular-ui-router-tabs

rpocklin2kMIT2.0.2TypeScript support: included

Idiot-proof tab panes with route support using Angular.js + Bootstrap 3 + UI Router.

angular, tabs, navigation, ui-router, bootstrap

readme

UI Router Tabs

Leverages UI Bootstrap and UI Router to give you full-strength route-driven tabs in Angular.js.

Build Status Coverage Status     Gratipay

Example / Demo

Link

How to Install / Usage

  1. Install the plugin into your Angular.js project, manually or via bower install angular-ui-router-tabs
  2. Add ui.router.tabs as a new module dependency in your angular app.

  3. Define your routes in a hierarchy that makes sense for a tabbed layout, Eg:

       $stateProvider.state('user', {
         url:         '',
         controller: 'UserCtrl',
         templateUrl: 'example.html'
       }).state('user.settings', {
         url:         '/user/settings',
         templateUrl: 'user/settings.html'
       }).state('user.accounts', {
         url:         '/user/accounts',
         templateUrl: 'user/accounts.html'
       });
  4. Define your tabData (or similiar variable) in the root view controller of your tabs (ie. UserCtrl in the case above) Eg:

       $scope.tabData   = [
         {
           heading: 'Settings',
           route:   'user.settings'
         },
         {
           heading: 'Accounts',
           route:   'user.accounts',
           disable: true
         }
       ];

    NOTE: You can also specify params and options to pass special parameters or options for the target route to UI Router, Eg:

       {
         heading: 'Accounts',
         route:   'user.accounts',
         params:  {
                    accountId: account.id
                  },
         options: {}
       }
  5. Declare the following in your the parent HTML view template <tabs data="tabData" type="tabs"></tabs>.

    Optional attributes for the <tabs> (which are passed on to the UI Bootstrap component) are:

    • type: [ 'tabs' | 'pills' ]
    • vertical: boolean
    • justified: boolean
    • class: string
    • templateUrl: <template url name>

    NOTE: If you use a custom template, you may need to define a ui-view placeholder for the child content panes in the same HTML view template eg. <ui-view></ui-view>.

Tips

  • UI Bootstrap Tabs will not select a tab by default. If you want it to, specify the target sub-route when you show the tabs (ie. link the ui-view containing the tabs with the default (first) element as the sub-route example/#/user/settings in the example.)
  • You can override the default directive template by specifying template-url="my_template.html" on the <tabs> element.
  • You can enable / disable tabs by specifying disable: true in the tabData (can be dynamically set).
  • You can use <tab-heading> in a custom directive template to add any HTML into the tab title (eg. icons)
  • You can update the tabData variable dynamically, if you want to.
  • You can move the <tabs> tag around to wherever you want the tab listing to appear. (left-positioned is the best spot to enable responsive design.).
  • Each tab will have a default class of tab, an active tab will have the active class.

Running Locally

  1. Checkout git repository locally: git clone git@github.com:rpocklin/ui-router-tabs.git
  2. npm install
  3. bower install
  4. grunt serve
  5. View http://localhost:9000/example/ in your browser to see the example.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature') - please consider adding tests!
  4. Push to the branch (git push origin my-new-feature)
  5. Run grunt and ensure there are no errors.
  6. Create a new Pull Request

History

  • 2.0.2 Fixed invalid <ui-view> placement in default template.
  • 2.0.1 Fixed invalid html in default template (missing <div>).
  • 2.0.0 Added class and template-url attributes on uib-tab and began using <uib-tab-heading> tag.
  • 1.8.0 Added inline template by default (as requested) and allowed customer classes parameter.
  • 1.7.0 Added uib prefix for UI Bootstrap elements (as per v0.14.0). See #47.
    Upgraded angular-bootstrap to v14.0.
  • 1.6.0 Renamed disabled attribute to disable in line with UI Bootstrap <tab>. See #39.
  • 1.5.1 Removed bower_components from repository. See #40.
  • 1.5.0 Bumped angular-bootstrap dependency to v0.13.0 (fixes default tab being auto-selected).
  • 1.4.3 Added handling of $stateChangeCancel, $stateChangeError and $stateNotFound to reset active tab.
  • 1.4.2 Added feature to update tabs if state change event is cancelled. See #19.
  • 1.4.1 Bumped angular-bootstrap dependency to v0.12.1.
  • 1.4.0 Removed default $state.go(..) route option, added disabled option and updated jsbeautifier. See #16.
  • 1.3.0 Improved state equality checking to include params and options.
  • 1.2.0 Prevented reload of current state again. See #11.
  • 1.1.4 Added support for strict-di mode.
  • 1.1.3 Fixed tab switching when using ngTouch. See #2.
  • 1.1.2 Added $stateChangeSuccess watcher to update parent tab(s) when using
    ui-sref or $state.go(). See #1.
  • 1.1.0 Added nested tab support (tabs within tabs)
  • 1.0.0 Initial release

License

Released under the MIT License. See the LICENSE file for further details.

changelog

0.2.14 (2015-04-23)

Bug Fixes

  • $StateRefDirective: resolve missing support for svg anchor elements #1667 (0149a7bb)
  • $urlMatcherFactory:
    • regex params should respect case-sensitivity (1e10519f, closes #1671)
    • unquote all dashes from array params (06664d33)
    • add Type.$normalize function (b0c6aa23)
    • make optional params regex grouping optional (06f73794, closes #1576)
  • $state: allow about..* glob patterns (e39b27a2)
  • uiSref:
    • use Object's toString instead of Window's toString (2aa7f4d1)
    • add absolute to allowed transition options (ae1b3c4e)
  • uiSrefActive: Apply active classes on lazy loaded states (f0ddbe7b)
  • uiView: add $element to locals for view controller (db68914c)

Features

  • $state:
    • support URLs with #fragments (3da0a170)
    • inject resolve params into controllerProvider (b380c223, closes #1131)
    • added 'state' to state reload method (feat no.1612) - modiefied options.reload (b8f04575)
    • broadcast $stateChangeCancel event when event.preventDefault() is called in $sta (ecefb758)
  • $uiViewScroll: change function to return promise (c2a9a311, closes #1702)
  • uiSrefActive: Added support for multiple nested uiSref directives (b1844948)

0.2.13 (2014-11-20)

This release primarily fixes issues reported against 0.2.12

Bug Fixes

  • $state: fix $state.includes/.is to apply param types before comparisions fix(uiSref): ma (19715d15, closes #1513)
    • Avoid re-synchronizing from url after .transitionTo (b267ecd3, closes #1573)
  • $urlMatcherFactory:
    • Built-in date type uses local time zone (d726bedc)
    • make date type fn check .is before running (aa94ce3b, closes #1564)
    • early binding of array handler bypasses type resolution (ada4bc27)
    • add 'any' Type for non-encoding non-url params (3bfd75ab, closes #1562)
    • fix encoding slashes in params (0c983a08, closes #1119)
    • fix mixed path/query params ordering problem (a479fbd0, closes #1543)
  • ArrayType:
  • Param: fix default value shorthand declaration (831d812a, closes #1554)
  • common: fixed the _.filter clone to not create sparse arrays (750f5cf5, closes #1563)
  • ie8: fix calls to indexOf and filter (dcb31b84, closes #1556)

Features

0.2.12 (2014-11-13)

Bug Fixes

  • $resolve: use resolve fn result, not parent resolved value of same name (67f5e00c, closes [#1317], [#1353])
  • $state:
    • populate default params in .transitionTo. (3f60fbe6, closes [#1396])
    • reload() now reinvokes controllers (73443420, closes [#582])
    • do not emit $viewContentLoading if notify: false (74255feb, closes #1387)
    • register states at config-time (4533fe36)
    • handle parent.name when parent is obj (4533fe36)
  • $urlMatcherFactory:
    • register types at config (4533fe36, closes [#1476])
    • made path params default value "" for backwards compat (8f998e71)
    • Pre-replace certain param values for better mapping (6374a3e2)
    • fixed ParamSet.$$keys() ordering (9136fecb)
    • empty string policy now respected in Param.value() (db12c85c)
    • "string" type now encodes/decodes slashes (3045e415, closes [#1119])
    • allow arrays in both path and query params (fdd2f2c1, closes [#1073], [#1045], [#1486], [#1394])
    • typed params in search (8d4cab69, closes #1488)
    • no longer generate unroutable urls (cb9fd9d8, closes #1487)
    • handle optional parameter followed by required parameter in url format. (efc72106)
    • default to parameter string coersion. (13a468a7, closes #1414)
    • concat respects strictMode/caseInsensitive (dd72e103, closes [#1395])
  • ui-sref:
    • Allow sref state options to take a scope object (b5f7b596)
    • replace raw href modification with attrs. (08c96782)
    • nagivate to state when url is "" fix($state.href): generate href for state with (656b5aab, closes #1363)
    • Check that state is defined in isMatch() (92aebc75, closes #1314, #1332)
  • uiView:
  • urlRouter: html5Mode accepts an object from angular v1.3.0-rc.3 (7fea1e9d)
  • stateFilters: mark state filters as stateful. (a00b353e, closes [#1479])
  • ui-router: re-add IE8 compatibility for map/filter/keys (8ce69d9f, closes [#1518], [#1383])
  • package: point 'main' to a valid filename (ac903350)
  • travis: make CI build faster (0531de05)

Features

Default and Typed params

This release includes a lot of bug fixes around default/optional and typed parameters. As such, 0.2.12 is the first release where we recommend those features be used.

  • $state:
    • add state params validation (b1379e6a, closes #1433)
    • is/includes/get work on relative stateOrName (232e94b3)
    • .reload() returns state transition promise (639e0565)
  • $templateFactory: request templateURL as text/html (ccd60769, closes [#1287])
  • $urlMatcherFactory: Made a Params and ParamSet class (0cc1e6cc)

0.2.11 (2014-08-26)

Bug Fixes

  • $resolve: Resolves only inherit from immediate parent fixes #702 (df34e20c)
  • $state:
    • change $state.href default options.inherit to true (deea695f)
    • sanity-check state lookups (456fd5ae, closes #980)
    • didn't comply to inherit parameter (09836781)
    • allow view content loading broadcast (7b78edee)
  • $urlMatcherFactory:
  • UrlMatcher:
    • query param function defaults (f9c20530)
    • don't decode default values (63607bdb)
  • travis: update Node version to fix build (d6b95ef2)
  • uiSref:
    • Generate an href for states with a blank url. closes #1293 (691745b1)
    • should inherit params by default (b973dad1)
    • cancel transition if preventDefault() has been called (2e6d9167)
  • uiView: Fixed infinite loop when is called .go() from a controller. (e13988b8, closes #1194)
  • docs:
    • Fixed link to milestones (6c0ae500)
    • fix bug in decorator example (4bd00af5)
    • Removed an incorrect semi-colon (af97cef8)
    • Explain return value of rule as function (5e887890)

Features

  • $state:
    • allow parameters to pass unharmed (8939d057)
      • BREAKING CHANGE: state parameters are no longer automatically coerced to strings, and unspecified parameter values are now set to undefined rather than null.
    • allow prevent syncUrl on failure (753060b9)
  • typescript: Add typescript definitions for component builds (521ceb3f)
  • uiSref: extend syntax for ui-sref (71cad3d6)
  • uiSrefActive:

    • Also activate for child states. (bf163ad6, closes #818)

      • BREAKING CHANGE Since ui-sref-active now activates even when child states are active you may need to swap out your ui-sref-active with ui-sref-active-eq, thought typically we think devs want the auto inheritance.
    • uiSrefActiveEq: new directive with old ui-sref-active behavior

  • $urlRouter:
    • defer URL change interception (c72d8ce1)
    • force URLs to have valid params (d48505cd)
    • abstract $location handling (08b4636b)
  • $urlMatcherFactory:
  • UrlMatcher:
    • handle query string arrays (9cf764ef, closes #373)
    • injectable functions as defaults (00966ecd)
    • default values & type decoding for query params (a472b301)
    • allow shorthand definitions (5b724304)
    • validates whole interface (32b27db1)
    • implement non-strict matching (a3e21366)
    • add per-param config support (07b3029f)
      • BREAKING CHANGE: the params option in state configurations must now be an object keyed by parameter name.

0.2.10 (2014-03-12)

Bug Fixes

  • $state: use $browser.baseHref() when generating urls with .href() (cbcc8488)
  • bower.json: JS files should not be ignored (ccdab193)
  • dev: karma:background task is missing, can't run grunt:dev. (d9f7b898)
  • sample: Contacts menu button not staying active when navigating to detail states. Need t (2fcb8443)
  • uiSref: support mock-clicks/events with no data (717d3ff7)
  • uiView:
    • Do NOT autoscroll when autoscroll attr is missing (affe5bd7, closes #807)
    • Refactoring uiView directive to copy ngView logic (548fab6a, closes #857, #552)

Features

  • $state: includes() allows glob patterns for state matching. (2d5f6b37)
  • UrlMatcher: Add support for case insensitive url matching (642d5247)
  • uiSref: add support for transition options (2ed7a728)
  • uiView: add controllerAs config with function (1ee7334a)

0.2.9 (2014-01-17)

This release is identical to 0.2.8. 0.2.8 was re-tagged in git to fix a problem with bower.

0.2.8 (2014-01-16)

Bug Fixes

  • $state: allow null to be passed as 'params' param (094dc30e)
  • $state.go: param inheritance shouldn't inherit from siblings (aea872e0)
  • bower.json: fixes bower.json (eed3cc4d)
  • uiSrefActive: annotate controller injection (85921422, closes #671)
  • uiView:
    • autoscroll tests pass on 1.2.4 & 1.1.5 (86eacac0)
    • don't animate initial load (83b6634d)
    • test pass against 1.0.8 and 1.2.4 (a402415a)
    • it should autoscroll when expr is missing. (8bb9e27a)

Features

  • uiSref: add target attribute behaviour (c12bf9a5)
  • uiView:
    • merge autoscroll expression test. (b89e0f87)
    • cache and test autoscroll expression (ee262282)