,可执行指令/功能只有一次ionic2

,可执行指令/功能只有一次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倍,但该服务将居住,这意味着你要会跨越组件的创建和销毁持久化数据。

+0

我会试试这个谢谢,但我需要shouldAnimate将它设置为false,一旦它第一次为真,否则它将每次运行该指令。只是为了100%确定你已经明白了我的观点,实际只做一次指令,而不再在本页加载。 –

+0

那么,只需将其设置为'false'而不是'true' ...也不能“执行”一次指令。您可以设置一个变量,并使用它不要触发指令内的某些内容。但是,如果指令位于模板中,则该指令将由Angular创建。 –

+0

是的,抱歉我的错误表达,但我的意思是完全一样的。因为只有当布尔变量名称为true时才会触发此指令。所以,这一切都取决于布尔值。 –