,可执行指令/功能只有一次ionic2
问题描述:
我这是在离子列表通过这样的指令:,可执行指令/功能只有一次ionic2
<ion-item-sliding [animateItemSliding]="shouldAnimate" </ion-item>
Basicly它是只用于转换动画,其作用像的CSS规则的自定义指令滑动并反转回正常状态。 我通过设置shouldAnimate布尔像
export class PageName {
shouldAnimate: boolean; ... }
ionViewDidLoad() {
this.shouldAnimate = true;
};
ionViewWillLeave() {
this.shouldAnimate = false;
};
这通过使用生命周期事件工作了一会儿exicuting它。但是,如果页面再次生成,它仍然将shouldAnimate设置为true。
我希望能够找到解决指令的方法,只有第一次您打开此页面。 因此,只有在第一次打开此页面时,此变量的布尔值才应该为true,并且要记住此选项(将boolean设置为false),并且永远不要再次执行它(或者直到您关闭应用程序并再次从电话中完全加载)
答
它不能按照你想要的方式完成。一旦组件被销毁并重新创建,就没有办法知道它是之前创建的。您需要在组件的不同实例上持续保存状态。 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
组件现在可能破坏counrless倍,但该服务将居住,这意味着你要会跨越组件的创建和销毁持久化数据。
我会试试这个谢谢,但我需要shouldAnimate将它设置为false,一旦它第一次为真,否则它将每次运行该指令。只是为了100%确定你已经明白了我的观点,实际只做一次指令,而不再在本页加载。 –
那么,只需将其设置为'false'而不是'true' ...也不能“执行”一次指令。您可以设置一个变量,并使用它不要触发指令内的某些内容。但是,如果指令位于模板中,则该指令将由Angular创建。 –
是的,抱歉我的错误表达,但我的意思是完全一样的。因为只有当布尔变量名称为true时才会触发此指令。所以,这一切都取决于布尔值。 –