Config
Ionic Config 提供了一种在整个应用中全局修改组件属性的方式。它可以设置应用的模式、标签按钮布局、动画效果等。
全局配置
可用的配置项可以在 IonicConfig 接口中找到。
以下示例禁用了涟漪效果,并将默认模式设置为 Material Design:
- JavaScript
- Angular
- Angular (独立组件)
- React
- Vue
window.Ionic = {
config: {
rippleEffect: false,
mode: 'md',
},
};
import { IonicModule } from '@ionic/angular';
@NgModule({
...
imports: [
IonicModule.forRoot({
rippleEffect: false,
mode: 'md'
})
],
...
})
import { provideIonicAngular } from '@ionic/angular/standalone';
bootstrapApplication(AppComponent, {
providers: [
...,
provideIonicAngular({
rippleEffect: false,
mode: 'md'
})
]
})
setupIonicReact 函数必须在渲染任何 Ionic 组件(包括 IonApp)之前调用。
import { setupIonicReact } from '@ionic/react';
setupIonicReact({
rippleEffect: false,
mode: 'md',
});
import { IonicVue } from '@ionic/vue';
import { createApp } from 'vue';
createApp(App).use(IonicVue, {
rippleEffect: false,
mode: 'md',
});
按组件配置
Ionic Config 不是响应式的。在组件渲染后更新配置值将不会生效,仍然会使用之前的值。当需要响应式值时,建议使用组件的属性(properties)而非更新配置。
- JavaScript
- Angular
- Angular (Standalone)
- React
- Vue
不推荐
window.Ionic = {
config: {
// 当应用需要响应式值时,不推荐使用此方法
backButtonText: 'Go Back',
},
};
推荐
<ion-back-button></ion-back-button>
<script>
const backButton = document.querySelector('ion-back-button');
/**
* 返回按钮的文字可以在
* 语言环境改变时随时更新。
*/
backButton.text = 'Go Back';
</script>
不推荐
import { IonicModule } from '@ionic/angular';
@NgModule({
...
imports: [
IonicModule.forRoot({
// 当应用需要响应式值时,不推荐使用此方法
backButtonText: 'Go Back'
})
],
...
});
推荐
<ion-back-button [text]="backButtonText"></ion-back-button>
@Component(...)
class MyComponent {
/**
* 返回按钮的文字可以在
* 语言环境改变时随时更新。
*/
backButtonText = 'Go Back';
}
不推荐
import { provideIonicAngular } from '@ionic/angular/standalone';
bootstrapApplication(AppComponent, {
providers: [
...,
provideIonicAngular({
// 当应用需要响应式值时,不推荐使用此方法
backButtonText: 'Go Back'
})
]
})
推荐
<ion-back-button [text]="backButtonText"></ion-back-button>
@Component(...)
class MyComponent {
/**
* 返回按钮的文字可以在
* 语言环境改变时随时更新。
*/
backButtonText = 'Go Back';
}
不推荐
import { setupIonicReact } from '@ionic/react';
setupIonicReact({
// 当应用需要响应式值时,不推荐使用此方法
backButtonText: 'Go Back',
});
推荐
import { useState } from 'react';
import { IonBackButton } from '@ionic/react';
const ExampleComponent = () => {
const [backButtonText, setBackButtonText] = useState('Go Back');
return (
{/*
* 返回按钮的文字可以在
* 语言环境改变时随时更新。
*/}
<IonBackButton text={backButtonText}></IonBackButton>
)
}
不推荐
import { IonicVue } from '@ionic/vue';
import { createApp } from 'vue';
// 当应用需要响应式值时,不推荐使用此方法
createApp(App).use(IonicVue, {
backButtonText: 'Go Back',
});
推荐
<template>
<ion-back-button [text]="backButtonText"></ion-back-button>
</template>
<script setup lang="ts">
import { IonBackButton } from '@ionic/vue';
import { ref } from 'vue';
/**
* 返回按钮的文字可以在
* 语言环境改变时随时更新。
*/
const backButtonText = ref('Go Back');
</script>
按平台配置
Ionic Config 也可以基于不同平台进行设置。例如,这允许你在可能性能较慢的设备上的浏览器中运行时禁用动画。开发者可以利用 Platform 工具来实现这一点。
在以下示例中,我们仅在 Ionic 应用运行于移动端网页浏览器时,才禁用所有动画。
- Angular
- Angular (Standalone)
- React
- Vue
由于配置是在运行时设置的,你将无法访问平台依赖注入(Platform Dependency Injection)。不过,你可以直接使用该提供者(provider)所依赖的底层函数。
关于可检测的平台类型,请参阅 Angular 平台文档。
import { isPlatform, IonicModule } from '@ionic/angular';
@NgModule({
...
imports: [
IonicModule.forRoot({
animated: !isPlatform('mobileweb')
})
],
...
})
由于配置是在运行时设置的,你将无法访问平台依赖注入(Platform Dependency Injection)。不过,你可以直接使用该提供者(provider)所依赖的底层函数。
关于可检测的平台类型,请参阅 Angular 平台文档。
import { isPlatform, provideIonicAngular } from '@ionic/angular/standalone';
bootstrapApplication(AppComponent, {
providers: [
...,
provideIonicAngular({
animated: !isPlatform('mobileweb')
})
]
})
关于可检测的平台类型,请参阅 React 平台文档。
import { isPlatform, setupIonicReact } from '@ionic/react';
setupIonicReact({
animated: !isPlatform('mobileweb'),
});
关于可检测的平台类型,请参阅 Vue 平台文档。
import { IonicVue, isPlatform } from '@ionic/vue';
createApp(App).use(IonicVue, {
animated: !isPlatform('mobileweb'),
});
回退机制
下面的示例允许你根据平台设置完全不同的配置,如果没有匹配的平台,则回退到默认配置:
- Angular
- Angular (独立组件)
- React
- Vue
import { isPlatform, IonicModule } from '@ionic/angular';
const getConfig = () => {
let config = {
animated: false
};
if (isPlatform('iphone')) {
config = {
...config,
backButtonText: 'Previous'
}
}
return config;
}
@NgModule({
...
imports: [
IonicModule.forRoot(getConfig())
],
...
});
import { isPlatform, provideIonicAngular } from '@ionic/angular/standalone';
const getConfig = () => {
let config = {
animated: false
};
if (isPlatform('iphone')) {
config = {
...config,
backButtonText: 'Previous'
}
}
return config;
}
bootstrapApplication(AppComponent, {
providers: [
...,
provideIonicAngular(getConfig())
]
})
import { isPlatform, setupIonicReact } from '@ionic/react';
const getConfig = () => {
let config = {
animated: false,
};
if (isPlatform('iphone')) {
config = {
...config,
backButtonText: 'Previous',
};
}
return config;
};
setupIonicReact(getConfig());
import { IonicVue, isPlatform } from '@ionic/vue';
const getConfig = () => {
let config = {
animated: false,
};
if (isPlatform('iphone')) {
config = {
...config,
backButtonText: 'Previous',
};
}
return config;
};
createApp(App).use(IonicVue, getConfig());
覆盖机制
最后一个示例允许你根据不同平台的需求,逐步构建一个配置对象。
- Angular
- Angular (独立组件)
- React
- Vue
import { isPlatform, IonicModule } from '@ionic/angular';
const getConfig = () => {
if (isPlatform('hybrid')) {
return {
tabButtonLayout: 'label-hide'
}
}
return {
tabButtonLayout: 'icon-top'
};
}
@NgModule({
...
imports: [
IonicModule.forRoot(getConfig())
],
...
});
import { isPlatform, provideIonicAngular } from '@ionic/angular/standalone';
const getConfig = () => {
if (isPlatform('hybrid')) {
return {
tabButtonLayout: 'label-hide'
}
}
return {
tabButtonLayout: 'icon-top'
};
}
bootstrapApplication(AppComponent, {
providers: [
...,
provideIonicAngular(getConfig())
]
})
import { isPlatform, setupIonicReact } from '@ionic/react';
const getConfig = () => {
if (isPlatform('hybrid')) {
return {
tabButtonLayout: 'label-hide',
};
}
return {
tabButtonLayout: 'icon-top',
};
};
setupIonicReact(getConfig());
import { IonicVue, isPlatform } from '@ionic/vue';
const getConfig = () => {
if (isPlatform('hybrid')) {
return {
tabButtonLayout: 'label-hide',
};
}
return {
tabButtonLayout: 'icon-top',
};
};
createApp(App).use(IonicVue, getConfig());
访问当前模式
在某些情况下,你可能需要在应用逻辑中以编程方式访问当前 Ionic 模式。这对于应用条件行为、获取特定资源或基于当前激活的样式模式执行其他操作非常有用。
读取配置 (Angular)
Ionic Angular 提供了一个 Config 提供者(provider)来访问 Ionic 配置。
get
| 描述 | 将配置值作为 any 类型返回。如果配置未定义,则返回 null。 |
| 签名 | get(key: string, fallback?: any) => any |
示例
- Angular
- Angular (Standalone)
import { Config } from '@ionic/angular';
@Component(...)
class AppComponent {
constructor(config: Config) {
const mode = config.get('mode');
}
}
import { Config } from '@ionic/angular/standalone';
@Component(...)
class AppComponent {
constructor(config: Config) {
const mode = config.get('mode');
}
}