我有一个指令,它在这样的离子列表中传递:
<ion-item-sliding [animateItemSliding]="shouldAnimate" </ion-item>
基本上它是一个自定义指令,它只应用变换动画的css规则,其作用类似于滑动,并反转回正常状态。 我通过将shouldAnimate布尔值设置为
来进行预测export class PageName {
shouldAnimate: boolean; ... }
ionViewDidLoad() {
this.shouldAnimate = true;
};
ionViewWillLeave() {
this.shouldAnimate = false;
};
这可以通过使用Lifecycle事件来实现。但是,如果再次生成页面,它仍会将shouldAnimate设置为true。
我希望能够找到只删除指令的方法,而只是第一次才能打开此页面。 所以,这个变量的布尔值只有在你第一次打开这个页面时才应该是真的,而不是记住这个选择(将boolean设置为false)并且永远不再执行它(或者可能直到你关闭应用程序并再次从手机中完全加载)
答案 0 :(得分:0)
不能按照你想要的方式完成。一旦组件被销毁并再次创建,就无法知道它之前已经创建过。您需要在某个地方跨组件的不同实例保持状态。 Angular的方法是服务。
创建一个存储此数据的服务。
@Injectable()
export class MyService {
shouldAnimate = false
}
在某处提供,例如在AppModule
中。将其添加到元数据中(您传递给@NgModel
的对象)。
providers: [MyService],
现在在组件中注入一个单独的服务。
export class PageName {
constructor(private myService: MyService) {}
}
现在只需将变量翻转一次,如果尚未翻转的话。最好在OnInit
生命周期钩子中完成。
ngOnInit() {
if (!this.myService.shouldAnimate) {
this.myService.shouldAnimate = true
}
}
您的PageName
组件现在可能会被无时间破坏,但服务将继续存在,这意味着您想要的数据将在组件的创建和销毁过程中持续存在。