声明周期事件详细

本文详细介绍了Vue.js中的生命周期函数,包括beforeCreate、created、beforeMount、mounted等关键阶段的作用及使用场景。并提供了代码示例帮助理解。


声明周期函数-生命周期钩子函数-生命周期事件

每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到 DOM,以及在数据改变时更新 DOM。在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码。


在引入Vue.js插件下运行

一、生命周期函数

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

生命周期
初始化尚未完成,data数据,metheds方法都未挂在在vue实例上
一般用于页面重定向

beforeCreate(){
            console.log(111);
            console.log(this.msg);
        },

也买你初始化完成
第一个能data数据的生命周期,一般用于接口请求+数据初始化
DOM数据已经渲染完了,开始请求

created() {
                console.log(456);
            }

DOM挂载前
虚拟DOM元素挂载后,如果需要操作DOM,可以再次生命周期执行
beforeMount调用后,我们要开始渲染render函数了,首先我们会先生产一个虚拟dom,进行保存,然后再开始将render渲染成为真实的dom。渲染成真实dom后,会将渲染出来的真实dom替换掉原来的vm. e l ,然后再将替换后的 el,然后再将替换后的 el,然后再将替换后的el append到我们的页面内。

beforeMount() {
                console.log(this.$el);
            },

DOM挂载完成
再调用mounted,并将标识生命周期的一个属性_isMounted 置为true。所以mounted函数内,我们是可以操作dom的,因为这个时候dom已经渲染完成了。

mounted() {
                console.log(this.$el);
            }

页面更新前 可以执行0-多次
updated里面也可以操作dom,并拿到最新更新后的dom。不过这里我要插一句话了,mouted和updated的执行,并不会等待所有子组件都被挂载完成后再执行,所以如果你希望所有视图都更新完毕后再做些什么事情,那么你最好在mouted或者updated中加一个 n e x t T i c k (),然后把要做的事情放在 nextTick(),然后把要做的事情放在 nextTick(),然后把要做的事情放在netTick()中去做

beforeUpdate() {
                console.log(this.$el);
            }

页面更新后

updated(){
                console.log(this.$el);
            }

转载文章


总结

提示:这里对文章进行总结:

一些细节都在代码片中,注意看

### JSF 生命周期中的注解使用方法 JSF(JavaServer Faces)生命周期包含多个阶段,每个阶段都可以通过特定的注解来控制和定制行为。以下是关于 JSF 生命周期中注解使用的详细说明: #### 1. 管理 Bean 的作用域 在 JSF 中,Bean 的作用域决定了其生命周期范围。以下是一些常用的作用域注解及其用途: - **@RequestScoped**:Bean 在每次 HTTP 请求时创建,并在请求结束时销毁。适用于短生命周期的对象。 - **@ViewScoped**:Bean 在视图中保持状态,直到用户切换到其他页面[^1]。这种作用域非常适合表单提交和状态管理。 - **@SessionScoped**:Bean 在整个会话期间保持状态。适用于需要跨多个请求共享数据的情况。 - **@ApplicationScoped**:Bean 在整个应用程序生命周期内共享。适用于全局配置或常量。 示例代码: ```java import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; @ManagedBean(name = "requestBean") @RequestScoped public class RequestScopedBean { private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } } ``` #### 2. 监听生命周期事件 JSF 提供了注解来监听组件和应用的生命周期事件: - **@PostConstruct**:在依赖注入完成后调用,用于初始化 Bean 的属性或执行必要的逻辑。 - **@PreDestroy**:在 Bean 销毁前调用,用于清理资源或保存状态。 示例代码: ```java import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; @ManagedBean(name = "viewBean") @ViewScoped public class ViewScopedBean { private String message; @PostConstruct public void init() { message = "Initialized at " + new java.util.Date(); } @PreDestroy public void cleanup() { System.out.println("Bean is being destroyed"); } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } } ``` #### 3. 定义导航规则 JSF 使用注解来定义导航规则,简化页面跳转逻辑: - **@Named** 和 **@Inject**:结合 CDI(Contexts and Dependency Injection),可以更灵活地管理 Bean 和导航规则。 - **@FacesConverter**:用于自定义类型转换器,确保输入数据正确解析为所需类型。 示例代码: ```java import javax.enterprise.context.RequestScoped; import javax.inject.Named; @Named @RequestScoped public class NavigationBean { private String targetPage = "home"; public String getTargetPage() { return targetPage; } public void setTargetPage(String targetPage) { this.targetPage = targetPage; } public String navigate() { return targetPage + "?faces-redirect=true"; } } ``` #### 4. 自定义验证器和编辑器 JSF 支持通过注解定义自定义验证器和编辑器,以处理复杂的数据转换和验证逻辑: - **@FacesValidator**:用于定义自定义验证器。 - **@FacesConverter**:用于定义自定义转换器。 示例代码: ```java import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.validator.FacesValidator; import javax.faces.validator.Validator; import javax.faces.validator.ValidatorException; @FacesValidator("emailValidator") public class EmailValidator implements Validator { @Override public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { if (value == null || !value.toString().matches("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}")) { throw new ValidatorException(new FacesMessage("Invalid email format")); } } } ``` #### 5. 动态组件和条件渲染 通过注解可以动态控制组件的可见性和渲染逻辑: - **rendered** 属性可以通过 EL 表达式动态控制组件的渲染。 - **actionListener** 注解用于绑定事件处理逻辑。 示例代码: ```xml <h:commandButton value="Submit" action="#{bean.submit}" rendered="#{bean.showButton}" /> ``` ```java import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; @ManagedBean(name = "bean") @ViewScoped public class DynamicBean { private boolean showButton = true; public void submit() { // 处理提交逻辑 } public boolean isShowButton() { return showButton; } public void setShowButton(boolean showButton) { this.showButton = showButton; } } ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值