Releases: ionic-team/ionic-framework
4.0.0 Neutronium
Enjoy! 🎈
4.0.0-rc.3
Bug Fixes
- alert: update styles for rtl (#17129) (ceae5d2), closes #16295 #17012
- angular: apply validation classes properly (2b4d7b7), closes #17171 #16052 #15572 #16452 #17063
- angular: navigateRoot + animated (#17164) (a6559a4), closes #17144
- angular: race condition when fast navigation (#17197) (a945b03), closes #17194 #16449 #15413
- button: avoid using attribute selectors for disabled (#17198) (3defbf3)
- content: tap-click deadlock (#17170) (5cb7f68), closes #17138 #16863 #16191 #16911
- fab: remove layout contain from content (#17048) (0cf1894), closes #16780
- gesture: destroy gesture handler when it's done (#17184) (59bd823), closes #16433 #16974
- icon: update ionicons to flip for rtl (#17196) (d3b6e60), closes #17012
- item: fix margins on slotted content (avatar, thumbnail) (#17065) (3612651), closes #16997
- searchbar: keep search icon shown when searchbar has focus (#17154) (c917bb4)
- select: pass click event to popover interface (#17146) (3ff9faf), closes #17142
- textarea: new-line in firefox (#17176) (e7538f3), closes #17155
Features
- angular: add global pop() (#17182) (766c79d), closes #16340
- datetime: add readonly prop (#17139) (d513e8a)
- input: add getInputElement() (#17183) (a90084c), closes #17174
- react: complete controller integrations and navigation (#16849) (f46cd50)
- slides: expose updateAutoHeight (#17208) (835aea9), closes #15079
BREAKING CHANGES
NavController.goBack()
renamed toNavController.back()
4.0.0-rc.2
Bug Fixes
- action-sheet: remove the height shift on press and update iOS design (#16862) (82457d8), closes #16715 #16790
- angular: fix slides (#17085) (8357e5c)
- angular: hide some internal methods (#17121) (4d5dcd4)
- angular: NavController methods return a promise (#17106) (3aaf87a), closes #17103
- angular: ViewChild() fix (#17037) (27a4709), closes #17034
- datetime: do no change order of formatted dates w/ rtl (#17024) (169da37)
- fab-button: add default padding for fab-button (#17050) (418052f)
- icon: fix rtl detail icon for ios (#17016) (b4f3405), closes #14958
- input: disable shadow-dom for text inputs (#17043) (63e0501), closes #17020
- input: fix display of ion-input in narrow ion-item in Firefox (#16978) (1099dc3)
- inputs: fix styles in firefox (#17066) (0120eee)
- inputs: keyboard focus improvements (#16838) (6364e4e), closes #16815 #16872 #13978 #16610
- item: no lines on item should take precedence over list lines (#17049) (d2fa946), closes #16900
- picker: do not change datetime/picker column order in RTL (#17018) (1338d71), closes #16294
- rtl: fix rtl back button default (#17109) (a9a23af), closes #15357
- utils: remove console log (#17116) (b0f51d4)
Features
- angular: add tabs events (#17125) (6929bb8)
- angular: expose getSelected() (#17079) (3c801db), closes #17068
Reverts
- test: update avatar index.html (9e80b73)
BREAKING CHANGES
ionChange removed from ion-tabs
(ionChange)
becomes(ionTabsDidChange)
ion-tabs getSelected() returns a string
Previously the getSelected()
method of ion-tabs
returned a reference to the selected
ion-tab
, now it returns the name of tab as string.
4.0.0-rc.1
Bug Fixes
- angular: update @angular/router dependency (#16998) (76e9e02)
- col: handle RTL offset-, pull-, and push-* (#16702) (6d6472b)
- fab: fab size when href provided (b3316d4), closes #16833
- menu: swipe-back has higher priority (f05c599), closes #16864
- overlays: make them hidden until presented (#16903) (302be53), closes #16685
- popover: position properly in RTL / MD modes (#16745) (7846019)
- ripple-effect: never capture click (#16955) (7ee8aa6), closes #16939
- segment: update indicator and border based on theme (#16821) (74587db), closes #16820
- select: interfaceOptions can customize mode (#16826) (1227d57), closes #16825
- tab-button: allow standalone tab-button (#16905) (6ca7645), closes #16845
- tabs: fix goto root (#16926) (8ee9205), closes #16917
Features
- radio-group: add missing implementation for property allowEmptySelection (#16880) (09726b0), closes #16841
- react: add missing simple components to react. (#16836) (696f62c)
- react: create initial portal implementation for overlay ctrls (#16830) (99bdd1f)
- react: Initial implementations of controller required elements. (#16817) (e30c5f1)
Performance Improvements
- angular: bundle size improvements for angular (#16966) (44fb45e)
- angular: flat ng modules (#17007) (0b84e27), closes #17001
- angular: proxy fast properties (#16888) (ca9ec3e)
BREAKING CHANGES
In order to speed up the build and reduce the main bundle size,
we have moved the ionicons outside the webpack build pipeline.
Instead, a new copy task needs to be added to the angular.json
, specifically to the
the "assets"
option of the "build"
.
angular.json
{
"projects": {
"app": {
"architect": {
"build": {
"options": {
"assets": [
{
"glob": "**/*",
"input": "src/assets",
"output": "assets"
},
+ {
+ "glob": "**/*.svg",
+ "input": "node_modules/ionicons/dist/ionicons/svg",
+ "output": "./svg"
+ }
4.0.0-rc.0
Bug Fixes
- action-sheet: set 100% height to fix scrollable options (#16789) (e3d7282)
- all: ts 3.2 issues (f393a82)
- angular: Fix cordova browser error when resumed (#16810) (e735d2c)
- angular: fix sibling router-outlets (#16774) (35e3848), closes #16411
- angular: router-outlet memory leak (2c41823), closes #16285
- body: body background matches ion-content (0699884)
- core: export ionic lifecycle names (77640c9), closes #16760
- core: ts lint issue (#16814) (fb38002)
- list: adjust label margin to align with spec for md (#16751) (60ef98d), closes #16643
- modal: --box-shadow (e2ee0b6), closes #16798
- progress-bar: looking nice inside toolbar (b5efede)
- pwa: use 100% of the viewport (4c4bdf2)
- tab-bar: adds selected color if tab bar is using a color (#16766) (54e5a24), closes #16761
- virtual-scroll: fixes dynamic changes (d1cecf1)
Features
- angular: expose animationDirection (#16802) (320eb03)
- angular: tabs.select() (56dd8ae), closes #16753
Performance Improvements
- angular: detach fromn change detection (f613b3b)
4.0.0-beta.19
Bug Fixes
- angular: tab-bar slot=top (#16727) (d4e4b52), closes #16722
- angular: virtual-scroll (#16729) (f05c7d6), closes #16725 #16432 #16023 #14591 #16050 #15587
- datetime: picker inherits mode (#16731) (f93e4fd), closes #16717
- fab-button: adding size prop instead of [mini] (#16692) (e8cec60), closes #16680
- fab-button: get translucent working including with color (#16750) (c2ada84), closes #16450
Features
BREAKING CHANGES
Core Components
Removes the --width
and --height
variables from the following components, in favor of CSS:
- Button
- FAB Button
- Checkbox
- Removes the
--width
/--height
and adds a--size
variable that is set on the width and height, allowing width and height to still be set and border-radius to still use it as a variable - Radio
- Removes the
--width
/--height
and--inner-width
/--inner-height
variables. Calculates inner values based on parent element size.
Overlay Components
The following components have all be converted to shadow (or scoped) and have CSS variables for width/height:
- Action Sheet (scoped)
- Alert (scoped)
- Loading (scoped)
- Menu (shadow)
- Modal (scoped)
- Picker (scoped)
- Popover (scoped)
- Toast (shadow)
The above components will now have the following CSS variables for consistency among overlays:
Name |
---|
--height |
--max-height |
--max-width |
--min-height |
--min-width |
--width |
If the component does not set the value, it will default to auto
.
Removed CSS Variables
The following CSS properties have been removed:
Component | Property | Reason |
---|---|---|
Button | --height |
Use CSS instead |
Button | --margin-bottom |
Use CSS instead |
Button | --margin-end |
Use CSS instead |
Button | --margin-start |
Use CSS instead |
Button | --margin-top |
Use CSS instead |
Button | --width |
Use CSS instead |
Checkbox | --height |
Use CSS or --size |
Checkbox | --width |
Use CSS or --size |
FAB Button | --width |
Use CSS instead |
FAB Button | --height |
Use CSS instead |
FAB Button | --margin-bottom |
Use CSS instead |
FAB Button | --margin-end |
Use CSS instead |
FAB Button | --margin-start |
Use CSS instead |
FAB Button | `--margin-top | Use CSS instead |
Menu | --width-small |
Use a media query and --width |
Radio | --width |
Use CSS instead |
Radio | --height |
Use CSS instead |
Radio | --inner-height |
Calculated based on parent |
Radio | --inner-width |
Calculated based on parent |
FAB Button mini
Renamed [mini]
attribute to [size=small]
in ion-fab-button
.
- <ion-fab-button mini></ion-fab-button>
+ <ion-fab-button size="small"></ion-fab-button>
4.0.0-beta.18
Bug Fixes
- all: type issues with TS 3.2 (aa9d0d4)
- angular: disable change detection detach (68e2619)
- angular: lint issue (a961dca)
- angular: only routerLink works with angular router (63cbc92)
- angular: remove rogue console debug message (#16530) (9a47fc4), closes #16529
- angular: routerLink updates href (c8d9685)
- angular: swipe to go backs in tabs (#16710) (2553820)
- angular: swipeBackEnabled global config (#16668) (d69427e), closes #16624
- angular: wait for core defined in angular initializer (#16693) (060794e)
- button: reduce iOS border radius (#16575) (b1e56bb)
- button: relax css containment to "content" (#16553) (802a3d1)
- button/chip: move hover styles into media query (#16664) (a2c7b95), closes #16108
- content: do not scroll on pan-x (#16721) (b6aea08)
- img: fire didLoad in safari (#16571) (2ce986f), closes #16557
- item-divider: use prop for sticky (#16691) (a6a1723)
- loading: add backdropDismiss closes #16527 (#16570) (a251b50)
- react: add class based APIs (#16665) (2933f61), closes #16583
- refresher: close animation and hidden on pull down (#16700) (6b0fc49), closes #16254
- segment: set colors in the parent segment and remove the unused color property (#16590) (8029df3), closes #14853
- segment-button: make layout default to icon-top (#16573) (841375e)
- select: selection-option is hidden in edge (#16607) (6776e65), closes #16580
- select-option: using external style (8050247)
- tab-bar: hide on keyboard events (#16688) (1473805), closes #16419
- tab-bar: update tab-bar to set the color/background of tab-button (#16641) (2f63049), closes #14853
- theming: update ios design for button and card (#16586) (9c8c650)
- toolbar: style all slotted content in order not only buttons (#16617) (86fc9a5)
Features
- all: vscode HTML autocompletion support (#16687) (9b83bef)
- fab-button: add css border properties (#16656) (64557a7), closes #16652
- modal: add css vars (#16605) (235c685)
- progress-bar: add progress bar component (#16559) (9167fb4), closes #16558
- range: add support for range bar border radius (#16519) (c036cb0)
- theme: default colors based in step colors (95c0b1b)
- toast: add CSS variables for box-shadow and border (#16679) (1a299b0)
BREAKING CHANGES
[ANGULAR] Tabs
Tabs got the last bit of changes needed in order to support lazy loading of components. To support this, some changes are required for the router config. Using the tabs starter as an example, here's a diff of the changes:
import { RouterModule, Routes } from '@angular/router';
import { TabsPage } from './tabs.page';
-import { Tab1Page } from '../tab1/tab1.page';
-import { Tab2Page } from '../tab2/tab2.page';
-import { Tab3Page } from '../tab3/tab3.page';
const routes: Routes = [
{
path: 'tabs',
component: TabsPage,
children: [
- {
- path: '',
- redirectTo: '/tabs/(tab1:tab1)',
- pathMatch: 'full',
- },
{
path: 'tab1',
- outlet: 'tab1',
- component: Tab1Page
+ children: [
+ {
+ path: '',
+ loadChildren: '../tab1/tab1.module#Tab1PageModule'
+ }
+ ]
},
{
path: 'tab2',
- outlet: 'tab2',
- component: Tab2Page
+ children: [
+ {
+ path: '',
+ loadChildren: '../tab2/tab2.module#Tab2PageModule'
+ }
+ ]
},
{
path: 'tab3',
- outlet: 'tab3',
- component: Tab3Page
+ children: [
+ {
+ path: '',
+ loadChildren: '../tab3/tab3.module#Tab3PageModule'
+ }
+ ]
+ },
+ {
+ path: '',
+ redirectTo: '/tabs/tab1',
+ pathMatch: 'full'
}
]
},
{
path: '',
- redirectTo: '/tabs/(tab1:tab1)',
+ redirectTo: '/tabs/tab1',
pathMatch: 'full'
}
];
And for the tabs markup, we have something close to pre-beta 16 tabs, but still provides a custom tab-bar.
<ion-tabs>
- <ion-tab tab="tab1">
- <ion-router-outlet name="tab1"></ion-router-outlet>
- </ion-tab>
- <ion-tab tab="tab2">
- <ion-router-outlet name="tab2"></ion-router-outlet>
- </ion-tab>
- <ion-tab tab="tab3">
- <ion-router-outlet name="tab3"></ion-router-outlet>
- </ion-tab>
-
<ion-tab-bar slot="bottom">
-
- <ion-tab-button tab="tab1" href="/tabs/(tab1:tab1)">
+ <ion-tab-button tab="tab1">
<ion-icon name="flash"></ion-icon>
<ion-label>Tab One</ion-label>
</ion-tab-button>
- <ion-tab-button tab="tab2" href="/tabs/(tab2:tab2)">
+ <ion-tab-button tab="tab2">
<ion-icon name="apps"></ion-icon>
<ion-label>Tab Two</ion-label>
</ion-tab-button>
- <ion-tab-button tab="tab3" href="/tabs/(tab3:tab3)">
+ <ion-tab-button tab="tab3">
<ion-icon name="send"></ion-icon>
<ion-label>Tab Three</ion-label>
</ion-tab-button>
-
</ion-tab-bar>
</ion-tabs>
[ANGULAR] href does not cause Angular Router to navigate
For consistency sake, the href
attribute of ion-button
, ion-item
and ion-anchor
no longer
trigger navigation using the Angular’s Router,instead use angular’s [routerLink]
:
- <ion-button href="/path/to/page">
+ <ion-button routerLink="/path/to/page">
This change will not affect SEO since ionic will still use href
under the hood.
[ANGULAR] Prefixed Ion- components
For consistency with other frameworks and the rest of APIs and tooling, the exported
ionic components are prefixed with Ion
.
- import { Input } from '@ionic/angular';
+ import { IonInput } from '@ionic/angular';
This change might also help to improve autocompletion, and prevent collisions with other libraries.
4.0.0-beta.17
Bug Fixes
- alert: accepts any value (#16476) (50b0c6f), closes #16170
- angular: accept other url schemas (e8e7183)
- angular: avoid forEach in classList (359bdcf)
- angular: cleanup ion-invalid class (34cd1d1), closes #16353
- angular: default value of BooleanValueAccessor should be false (#16420) (429e083)
- angular: es6 classes break in ie11 (#16417) (ce1fcea), closes #15979
- angular: fix controlValueAccessor for boolean (b645bfd), closes #16371
- angular: fix tabs with useHash (#16392) (f831186), closes #16390
- angular: no animate in browser nav (276c883)
- angular: tune routerLink default behaviour (#16405) (72bc025)
- item-sliding: use a white item background instead of transparent (#16507) (2d33c63), closes #16474
- label: move default flex and margin to item (#16461) (723d17b), closes #15393
- list: do not style last child items by default (#16456) (09d69b9), closes #15185
- menu-controller: _getInstance() is internal (723296e)
- mode: lazy load same component, two different modes (#16401) (4dd4ccc)
- radio: removd hard coded inner-width and inner-height for iOS (5096503)
- range: add slot margins (#16464) (69f63b3)
- segment: height fits content (#16511) (aa61e81)
- tab-bar: update to match MD design and remove transforms (#16348) (bc3e192), closes #16231 #16231 ionic-team/ionic-docs#175 ionic-team/ionic-docs#163
- themes: update default toolbar and tab background to #fff (#16454) (12bcb41), closes #16384
- toast: make longer toasts available with pre-wrap (#16361) (52cea5a), closes #16360
- toolbar: match MD button spec (#16378) (7d7b995)
Features
4.0.0-beta.16
BREAKING CHANGES
Segment Button now requires the text to be wrapped in an ion-label
element for improved styling.
Old usage:
<ion-segment-button>
Item One
</ion-segment-button>
New usage:
<ion-segment-button>
<ion-label>Item One</ion-label>
</ion-segment-button>
Simplifying Chip
Because of updates to the Material Design spec, ion-chip
no longer requires a chip-specific version of ion-icon
or ion-button
. Chips themselves should be interactive and don't require a nested button.
Old usage:
<ion-chip>
<ion-chip-icon name="checkmark"><ion-chip-icon>
</ion-chip>
New usage:
<ion-chip>
<ion-icon name="checkmark"></ion-icon>
</ion-chip>
Bug Fixes
- alert: use tint for md button active background (#16278) (0fec722)
- all: update types to be required (#16218) (091625d)
- angular: add swipe-to-go-back gesture (108691d)
- angular: adds tabs stack (adae8d4)
- angular: disable transition heuristics by default (d9172b7)
- angular: es6 build (#16207) (a981116), closes #15979
- angular: fix handler outside zone (b8dae5e), closes #16338
- backdrop: update opacity to match MD spec (#16188) (3c9ed31)
- checkbox: align vertically (#16331) (bd3ca42)
- checkbox: match MD spec (#16186) (240171a)
- gesture: release gesture when it's disabled (c9b4e66), closes #16335
- input: remove clear icon in edge (59bee23)
- input: remove red shadow for firefox (767d299), closes #16318
- input: scroll assist works in with shadow-dom (#16206) (d817cc3), closes #15888 #15294 #15895
- inputs: fix aria with shadow-dom (#16329) (fd79b57)
- inputs: inherit in edge causes problems (0abf992)
- item: update to match Material Design spec (#16182) (e416c23), closes #14799
- label: placeholder + floating label (#16111) (a8be529)
- list-header: match MD bottom margin, match MD text color (#16274) (6794447)
- menu: update box-shadow for MD to match spec (#16183) (335acf9)
- range: increase MD horizontal padding (#16312) (5d00501)
- range: use fully opaque base in color active bar (#16224) (0757126)
- ripple-effect: follow MD spec (#16330) (6d59446)
- searchbar: align cancel button to center with search icon position (#16259) (5957867)
- segment-button: make layout optional (e9e33ad)
- tab-button: layout is mutable (#16332) (02a266c)
- tabs: works with no href (8e0f1ba)
- toast: update toast design to match MD spec (#16323) (188a635), closes #16271
- toggle: match MD toggle track background for off state (#16277) (8e2a6dd)
Features
- segment: adds global variable for targeting segment in toolbar (#16344) (10971cc)
- segment: adds scrollable and layout props and updates to follow the spec (#16273) (256745c), closes #16232 #16081 #14853
Performance Improvements
- angular: remove duplicated code in value-accessor (bfbbeca)
Dependencies
If you are using @ionic/angular, please update the version number of any @angular packages in your package.json file to 7.0.3
.
"dependencies": {
"@angular/common": "~7.0.3",
"@angular/core": "~7.0.3",
"@angular/forms": "~7.0.3",
"@angular/http": "~7.0.3",
"@angular/platform-browser": "~7.0.3",
"@angular/platform-browser-dynamic": "~7.0.3",
"@angular/router": "~7.0.3",
"rxjs": "6.3.3",
"devDependencies": {
"@angular-devkit/architect": "~0.10.5",
"@angular-devkit/build-angular": "~0.10.5",
"@angular-devkit/core": "~0.7.5",
"@angular-devkit/schematics": "~0.7.5",
"@angular/cli": "~7.0.3",
"@angular/compiler": "~7.0.3",
"@angular/compiler-cli": "~7.0.3",
"@angular/language-service": "~7.0.3",
4.0.0-beta.15
Breaking Changes
Removed Global CSS Variables
The following global CSS variables have been removed for the reasons listed.
Variable Name | Reason |
---|---|
--ion-toolbar-color-inactive |
Unused |
--ion-ripple-background-color |
Unused / Ripple color is based on component |
--ion-header-size |
Removed in favor of using CSS for h1-h6 |
--ion-header-step |
Removed in favor of using CSS for h1-h6 |
Renamed Global CSS Variables
The following global CSS variables have been renamed for the reasons listed.
Old Variable Name | New Variable Name | Reason |
---|---|---|
--ion-toolbar-text-color |
--ion-toolbar-color |
Variable is not limited to text color |
--ion-toolbar-color-active |
--ion-toolbar-color-activated |
Consistency with our component variables |
--ion-tabbar-text-color |
--ion-tab-bar-color |
Variable is not limited to text color |
--ion-tabbar-text-color-active |
--ion-tab-bar-color-activated |
Consistency with our component variables |
--ion-tabbar-background-color |
--ion-tab-bar-background |
Applies to the background property |
--ion-tabbar-background-color-focused |
--ion-tab-bar-background-focused |
Applies to the background property |
--ion-item-background-color |
--ion-item-background |
Applies to the background property |
--ion-item-background-color-active |
--ion-item-background-activated |
Applies to the background property / Consistency with our component variables |
--ion-item-text-color |
--ion-item-color |
Variable is not limited to text color |
--ion-placeholder-text-color |
--ion-placeholder-color |
Consistency with other variables |
Rethinking Tabs
One of the most valuable and complex components in Ionic's toolkit is Tabs. Tabs started off as a simple component that would create a tabbed interface to allow users to switch between different views in a way that was consistent with native UX paradigms.
Over time, we started hearing people ask for more features to be added: "Can we have one tab button that is just a button?" "Can I customize how the tab buttons are displayed?" "Can I use a custom icon in the tab?"
Traditionally, these features, and many others, were difficult to accomplish because Tabs was doing a lot of magic behind the scenes to generate the Tab bar and buttons. With this in mind, we thought it was time for a refresh to offer as much flexibility as possible within Tabs.
In order to do this, we had to change how Tabs were written in an app. Prior to Beta 14, Tabs would look like this:
<ion-tabs>
<ion-tab label="Home" icon="home" href="/tabs/(home:home)">
<ion-router-outlet name="home"></ion-router-outlet>
</ion-tab>
<ion-tab label="About" icon="information-circle" href="/tabs/(about:about)">
<ion-router-outlet name="about"></ion-router-outlet>
</ion-tab>
<ion-tab label="Contact" icon="contacts" href="/tabs/(contact:contact)">
<ion-router-outlet name="contact"></ion-router-outlet>
</ion-tab>
</ion-tabs>
Here, we have an ion-tab
element that accepts an icon, a label, and a link to navigate to as properties. This is pretty much how Tabs have worked all the way back to Ionic 1. In Beta 14, we've removed some of the magic from Tabs which allows for more customization:
<ion-tabs>
<ion-tab-bar>
<!-- No ion-tab, just a link that looks like a tab -->
<ion-tab-button href=”https://beta.ionicframework.com”>
<!-- <a href=”https://beta.ionicframework.com”> -->
<ion-icon name="globe"></ion-icon>
<ion-label>Schedule</ion-label>
</ion-tab-button>
<!-- No ion-tab, just a button that looks like a tab -->
<ion-tab-button (click)=”openCamera()”>
<ion-icon name="camera"></ion-icon>
<ion-label>Photo</ion-label>
</ion-tab-button>
<!-- Connected to ion-tab, on click will show the ion-tab with id home-view -->
<ion-tab-button tab=”home-view”>
<ion-icon name="home"></ion-icon>
<ion-label>Home</ion-label>
</ion-tab-button>
</ion-tab-bar>
<ion-tab tab=”home-view”>
<ion-content></ion-content>
<!-- or -->
<ion-nav></ion-nav>
<!-- or -->
<ion-router-outlet></ion-router-outlet>
</ion-tab>
</ion-tabs>
There's a lot going on here, so let's break it down:
- A single parent
ion-tabs
wraps the entire layout. Same as before. - A new element,
ion-tab-bar
, creates the Tab Bar which will contain buttons. - A new element,
ion-tab-button
, is used to create each button in the Tab Bar. These could be static links to different routes, buttons with click handlers on them, or link to whole tab views. - The
ion-tab
component becomes a separate container that has inline content (ion-content
), a navigation component (ion-nav
) or a router outlet (ion-router-outlet
).
To connect the ion-tab-button
to the ion-tab
, the tab
property must be added to both of these components. For example:
<ion-tabs>
<ion-tab-bar>
<ion-tab-button tab=”home-view”></ion-tab-button>
</ion-tab-bar>
<ion-tab tab=”home-view”></ion-tab>
</ion-tabs>
Since the tab
property is the same on the ion-tab-button
and ion-tab
, when the Tab Button is tapped, the home-view
Tab will become active. This takes the magic out of Tabs while making the behavior between the tab buttons and the views much more explicit.
Some other benefits of this refactor include:
- Can now be written as a standalone Tab Bar (with no attached Tab)
- Works with a navigation component or a plain content element
- Works with shadow DOM and allows easy customization of the Tab Bar
- Gives full control over the elements inside of the Tab Bar
- Integrates nicely with other frameworks that have different ways of rendering element nodes
Lastly, this change also fixes some outstanding issues with Tabs, so we're excited to get this out to you all!
Bug Fixes
- action-sheet: update Action Sheet design to match MD spec (#16135) (068303d)
- alert: match MD spec (#16145) (287aec8)
- alert: update alert min/max interface (#15987) (a0c60ff), closes #15986
- angular: generate proxies for ion-tabbar (#15954) (45b46b4)
- angular: make sure angular form control onChange is fired when needed (#16126) (d5f2e6f)
- badge: match MD padding (#16134) (615c518)
- button: match MD spec timing, outline, hover (#16160) (0faa355)
- button: match updated MD specs (#16144) (e9579d5)
- card: adjust styles to match MD (#16093) (44b0eab)
- checkbox: end position by default (9da51b3)
- cordova: fix resume event in cordova browser (#15945) (4318520), closes #15944
- datetime: can participate in native (#16106) (aad7711), closes #16075
- datetime: pickerOptions are all optional (#16101) (f014181), closes #16095
- fab-button: use correct background in list and update the md icon color (#16092) (9dfc863), closes #16091
- header: update box shadow to match MD spec (#16149) (00544e9)
- infinite-scroll: disabled ...