# Breaking Changes A list of the breaking changes introduced in Ionic Angular v4. - [Alert](#alert) - [Action Sheet](#action-sheet) - [Dynamic Mode](#dynamic-mode) - [Button](#button) - [Chip](#chip) - [Colors](#colors) - [Datetime](#datetime) - [FAB](#fab) - [Fixed Content](#fixed-content) - [Icon](#icon) - [Input](#Input) - [Item](#item) - [Item Divider](#item-divider) - [Item Options](#item-options) - [Item Sliding](#item-sliding) - [List Header](#list-header) - [Menu Toggle](#menu-toggle) - [Nav](#nav) - [Option](#option) - [Radio](#radio) - [Range](#range) - [Segment](#segment) - [Select](#select) - [Spinner](#spinner) - [Text / Typography](#text--typography) - [Tabs](#tabs) - [Theming](#theming) - [Toolbar](#toolbar) ## Alert The `title` and `subTitle` properties has been renamed to `header` and `subHeader` respectivelly. **Old Usage Example:** ```js const alert = await alertCtrl.create({ title: 'This is the title', subTitle: 'this is the sub title' }); await alert.present(); ``` **New Usage Example:** ```js const alert = await alertCtrl.create({ header: 'This is the title', subHeader: 'this is the sub title' }); await alert.present(); ``` ## Action Sheet The `title` and `subTitle` properties has been renamed to `header` and `subHeader` respectivelly. **Old Usage Example:** ```js const actionSheet = await actionSheetCtrl.create({ title: 'This is the title', subTitle: 'this is the sub title' }); await actionSheet.present(); ``` **New Usage Example:** ```js const actionSheet = await actionSheetCtrl.create({ header: 'This is the title', subHeader: 'this is the sub title' }); await actionSheet.present(); ``` ## Dynamic Mode Components are no longer able to have their mode changed dynamically. You can change the mode before the first render, but after that it will not style properly because only the initial mode's styles are included. ## Button ### Markup Changed Button should now be written as an `` element. Ionic will determine when to render an anchor tag based on the presence of an `href` attribute. **Old Usage Example:** ```html Default Anchor ``` **New Usage Example:** ```html Default Button Default Anchor ``` ### Attributes Renamed Previously to style icons inside of a button the following attributes were used: `icon-left`, `icon-right`, (and with the added support of RTL) `icon-start`, `icon-end`. These have been renamed to the following, and moved from the button element to the icon itself: | Old Property | New Property | Property Behavior | |---------------------------|----------------|-----------------------------------------------------------------------| | `icon-left`, `icon-start` | `slot="start"` | Positions to the left of the button in LTR, and to the right in RTL. | | `icon-right`, `icon-end` | `slot="end"` | Positions to the right of the button in LTR, and to the left in RTL. | In addition, several sets of mutually exclusive boolean attributes have been combined into a single string attribute. The `small` and `large` attributes are now combined under the `size` attribute. The `clear`, `outline`, and `solid` attributes have been combined under `fill`. And, lastly, the `full` and `block` attributes have been combined under `expand`. | Old Property | New Property | Property Behavior | | --------------------------- | ------------ | --------------------------- | | `small`, `large` | `size` | Sets the button size. | | `clear`, `outline`, `solid` | `fill` | Sets the button fill style. | | `full`, `block`             | `expand` | Sets the button width. | **Old Usage Example:** ```html Icon Left Icon Left on LTR, Right on RTL Icon Right Icon Right on LTR, Left on RTL Large Button Outline Button Full-width Button ``` **New Usage Example:** ```html Icon Left on LTR, Right on RTL Icon Right on LTR, Left on RTL Large Button Outline Button Full-width Button ``` ## Chip ### Markup Changed Buttons inside of an `` container should now be written as an `` element. Ionic will determine when to render an anchor tag based on the presence of an `href` attribute. **Old Usage Example:** ```html Default ``` **New Usage Example:** ```html Default ``` ## Colors The default Ionic theme colors have changed. Previously we had: ``` primary: #327eff secondary: #32db64 danger: #f53d3d light: #f4f4f4 dark: #222 ``` Some of their values have changed and we now include more colors by default: ``` primary: #3880ff secondary: #0cd1e8 tertiary: #7044ff success: #10dc60 warning: #ffce00 danger: #f04141 light: #f4f5f8 medium: #989aa2 dark: #222428 ``` The `secondary` color saw the largest change. If you were previously using our `secondary` color we recommend switching to `success` instead. ## Datetime The Datetime classes and interfaces have changed capitalization from `DateTime` to `Datetime`. This is more consistent with other components and their tags. **Old Usage Example:** ```javascript import { DateTime } from 'ionic-angular'; ``` **New Usage Example:** ```javascript import { Datetime } from 'ionic-angular'; ``` ## FAB ### Markup Changed Buttons inside of an `` container should now be written as an `` element. Ionic will determine when to render an anchor tag based on the presence of an `href` attribute. **Old Usage Example:** ```html ``` **New Usage Example:** ```html ``` ### Attributes Renamed The mutually exclusive boolean attributes to position the fab have been combined into two single string attributes. The attributes to align the fab horizontally are now combined under the `horizontal` attribute and the attributes to align the fab vertically are now combined under the `vertical` attribute: | Old Property | New Property | Property Behavior | |--------------|----------------------|-------------------------------------------------------------------------| | left | Removed | | | right | Removed | | | center | `horizontal="center"`| Positions to the center of the viewport. | | start | `horizontal="start"` | Positions to the left of the viewport in LTR, and to the right in RTL. | | end | `horizontal="end"` | Positions to the right of the viewport in LTR, and to the left in RTL. | | top | `vertical="top"` | Positions at the top of the viewport. | | bottom | `vertical="bottom"` | Positions at the bottom of the viewport. | | middle | `vertical="center"` | Positions at the center of the viewport. | _Note that `middle` has been changed to `center` for the vertical positioning._ **Old Usage Example:** ```html ``` **New Usage Example:** ```html ``` ## Fixed Content The `` container was previously placed inside of the fixed content by default. Now, any fixed content should use the `fixed` slot. **Old Usage Example:** ```html Scrollable Content ``` **New Usage Example:** ```html Scrollable Content ``` ## Icon ### Fonts Removed Icons have been refactored to use SVGs instead of fonts. Ionic will only fetch the SVG for the icon when it is needed, instead of having a large font file that is always loaded in. If any `CSS` is being overridden for an icon it will need to change to override the SVG itself. Below is a usage example of the differences in changing the icon color. **Old Usage Example:** ```css .icon { color: #000; } ``` **New Usage Example:** ```css .icon { fill: #000; } ``` ### Property Removed The `isActive` property has been removed. It only worked for `ios` icons previously. If you would like to switch between an outline and solid icon you should set it in the `name`, or `ios`/`md` attribute and then change it when needed. ## Input The Sass variables were all renamed from having `$text-input` as the prefix to `$input`. **Old Usage Example:** ```css $text-input-highlight-color-valid: #32db64; ``` **New Usage Example:** ```css $input-highlight-color-valid: #32db64; ``` ## Item ### Markup Changed Item should now be written as an `` element. Ionic will determine when to render an anchor tag based on the presence of an `href` attribute, and a button tag based on the presence of an `onclick` or `button` attribute. Otherwise, it will render a div. **Old Usage Example:** ```html Default Item Anchor Item ``` **New Usage Example:** ```html Default Item Button Item Anchor Item ``` ### Label Required Previously an `ion-label` would automatically get added to an `ion-item` if one wasn't provided. Now an `ion-label` should always be added if the component is used to display text. ```html Item Label ``` ### Attributes Renamed Previously to position elements inside of an `ion-item` the following attributes were used: `item-left`, `item-right`, (and with the added support of RTL) `item-start`, `item-end`. These have been renamed to the following: | Old Property | New Property | Property Behavior | |---------------------------|----------------|---------------------------------------------------------------------| | `item-left`, `item-start` | `slot="start"` | Positions to the left of the item in LTR, and to the right in RTL. | | `item-right`, `item-end` | `slot="end"` | Positions to the right of the item in LTR, and to the left in RTL. | **Old Usage Example:** ```html
Left
Item Label
Right
Left on LTR, Right on RTL
Item Label
Right on LTR, Left on RTL
``` **New Usage Example:** ```html
Left on LTR, Right on RTL
Item Label
Right on LTR, Left on RTL
``` ### Detail Push The attributes to show/hide the detail arrows on items have been converted to a single property and value. Instead of writing `detail-push` or `detail-none` to show/hide the arrow, it should be written `detail`/`detail="true"` or `detail="false"`. **Old Usage Example:** ```html Item Label ``` **New Usage Example:** ```html Item Label Item Label ``` By default, items that render buttons or anchor tags will show the arrow in `ios` mode. ## Item Divider ### Label Required Previously an `ion-label` would automatically get added to an `ion-item-divider` if one wasn't provided. Now an `ion-label` should always be added if the component is used to display text. ```html Item Divider Label ``` ## Item Options ### Attributes Renamed Previously to position the item options inside of an `ion-item-sliding` the `side` attribute would be used with one of the following values: `"left"`, `"right"`. These values have been renamed to `"start"` and `"end"` to better align with our support for RTL. | Old Value | New Value | |-----------------|-----------------| | `side="left"` | `side="start"` | | `side="right"` | `side="end"` | ## Item Sliding ### Markup Changed The option component should not be written as a `button` with an `ion-button` directive anymore. It should be written as an `ion-item-option`. This will render a native button element inside of it. **Old Usage Example:** ```html Item 1 ``` **New Usage Example:** ```html Item 1 ``` ### Method Renamed The `getSlidingPercent` method has been renamed to `getSlidingRatio` since the function is returning a ratio of the open amount of the item compared to the width of the options. ## List Header ### Label Required Previously an `ion-label` would automatically get added to an `ion-list-header` if one wasn't provided. Now an `ion-label` should always be added if the component is used to display text. ```html List Header Label ``` ## Menu Toggle ### Markup Changed The `menuToggle` attribute should not be added to an element anymore. Elements that should toggle a menu should be wrapped in an `ion-menu-toggle` element. **Old Usage Example:** ```html ``` **New Usage Example:** ```html Toggle Menu ``` ## Nav ### Method renamed The `remove` method has been renamed to `removeIndex` to avoid conflicts with HTML and be more descriptive as to what it does. The `getActiveChildNavs` method has been renamed to `getChildNavs`. ## Option ### Markup Changed Select's option element should now be written as ``. This makes it more obvious that the element should only be used with a Select. **Old Usage Example:** ```html Option 1 Option 2 Option 3 ``` **New Usage Example:** ```html Option 1 Option 2 Option 3 ``` ### Class Changed The class has been renamed from `Option` to `SelectOption` to keep it consistent with the element tag name. ## Radio ### Slot Required Previously radio was positioned inside of an item automatically or by using `item-left`/`item-right`. It is now required to have a `slot` to be positioned properly. **Old Usage Example:** ```html Apple Grape, checked, disabled Cherry ``` **New Usage Example:** ```html Apple Grape, checked, disabled Cherry ``` ### Radio Group Radio group has been changed to an element. It should now be wrapped around any `` elements as ``. **Old Usage Example:** ```html Apple Grape, checked, disabled Cherry ``` **New Usage Example:** ```html Apple Grape, checked, disabled Cherry ``` ## Range ### Attributes Renamed Previously to place content inside of a range the following attributes were used: `range-left`, `range-right`, (and with the added support of RTL) `range-start`, `range-end`. These have been renamed to the following: | Old Property | New Property | Property Behavior | |-----------------------------|----------------|-----------------------------------------------------------------------| | `range-left`, `range-start` | `slot="start"` | Positions to the left of the range in LTR, and to the right in RTL. | | `range-right`, `range-end` | `slot="end"` | Positions to the right of the range in LTR, and to the left in RTL. | **Old Usage Example:** ```html ``` **New Usage Example:** ```html ``` ## Segment The markup hasn't changed for Segments, but now writing `` will render a native button element inside of it. ## Select The `selectOptions` property was renamed to `interfaceOptions` since it directly correlates with the `interface` property. **Old Usage Example:** ```html ... ``` ```ts this.customOptions = { title: 'Pizza Toppings', subTitle: 'Select your toppings' }; ``` **New Usage Example:** ```html ... ``` ```ts this.customOptions = { title: 'Pizza Toppings', subTitle: 'Select your toppings' }; ``` ## Spinner ### Name Changed The `ios` and `ios-small` spinner's have been renamed to `lines` and `lines-small`, respectively. This also applies to any components that use spinner: `ion-loading`, `ion-infinite-scroll`, `ion-refresher`. **Old Usage Example:** ```html ``` **New Usage Example:** ```html ``` ## Text / Typography ### Markup Changed Typography should now be written as an `` element. Previously the `ion-text` attribute could be added to any HTML element to set its color. It should now be used as a wrapper around the HTML elements to style. **Old Usage Example:** ```html

H1: The quick brown fox jumps over the lazy dog

H2: The quick brown fox jumps over the lazy dog

H3: The quick brown fox jumps over the lazy dog

I saw a werewolf with a Chinese menu in his hand. Walking through the streets of Soho in the rain. He was looking for a place called Lee Ho Fook's. Gonna get a big dish of beef chow mein.

``` **New Usage Example:** ```html

H1: The quick brown fox jumps over the lazy dog

H2: The quick brown fox jumps over the lazy dog

H3: The quick brown fox jumps over the lazy dog

I saw a werewolf with a Chinese menu in his hand. Walking through the streets of Soho in the rain. He was looking for a place called Lee Ho Fook's. Gonna get a big dish of beef chow mein.

``` ## Tab Some properties in `ion-tab` changed: - [tabTitle] -> [label] - [tabIcon] -> [icon] - [tabBadge] -> [badge] - [tabBadgeStyle] -> [badgeStyle] **Old Usage Example:** ```html ``` **New Usage Example:** ```html ``` ## Theming ### Including Sass Previously all `scss` files in the `src` directory were imported. Now each `scss` file should be included for the component via Angular's `styleUrls` metadata. View [Angular's Component Styles](https://angular.io/guide/component-styles) for more information. This means that any styles wrapped with a page should now be removed since they will automatically be scoped to the component. **Old Usage Example:** ```scss page-schedule { p { color: red; } } ``` **New Usage Example:** ```scss p { color: red; } ``` ### Sass Variables Sass variables for changing the cordova statusbar have been renamed to app: **Old Usage Example:** ```css $cordova-ios-statusbar-padding: 20px; $cordova-md-statusbar-padding: 20px; ``` **New Usage Example:** ```css $app-ios-statusbar-padding: 20px; $app-md-statusbar-padding: 20px; ``` ## Toolbar ### Menu Toggle Previously if a `menuToggle` directive was added to an Ionic `button` in a toolbar, it would be positioned outside of the `ion-buttons` element. Since menu toggle is simply a wrapper to a button now, it should be placed inside of the `ion-buttons` element. **Old Usage Example:** ```html Left side menu toggle ``` **New Usage Example:** ```html Left side menu toggle ``` ### Attributes Renamed Previously to positions buttons inside of a toolbar the following attributes were used: `start`, `left`, `right`, `end`. These have been renamed to the following: | Old Property | New Property | Property Behavior | |--------------|--------------------|----------------------------------------------------------------------------------------------------------| | `start` | `slot="secondary"` | Positions element to the `left` of the content in `ios` mode, and directly to the `right` in `md` mode. | | `end` | `slot="primary"` | Positions element to the `right` of the content in `ios` mode, and to the far `right` in `md` mode. | | `left` | `slot="start"` | Positions to the `left` of the content in LTR, and to the `right` in RTL. | | `right` | `slot="end"` | Positions to the `right` of the content in LTR, and to the `left` in RTL. | **Old Usage Example:** ```html Title ``` **New Usage Example:** ```html Left Secondary Title Primary Right ```