🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
`init()` `logic_init()` `once()` 这三个函数(框架网页用函数)或方法(JS脚本用方法)页面初次加载都会被执行 `once()` 不管切换哪个圈子,都不会再执行,因为页面加载完毕后,只执行一次,就不会再执行,除非刷新当前网页。适合于页面的全局变量处理或者是界面的全局设置 `init()` 是为满足渲染界面的,PC端的模板不需要重复渲染,所以PC端仅执行一次,此时跟`once()` 等效,而在WAP端的话,因为界面UI跟据不同的圈子会重新加载局部界面,所以在WAP端的话,又随着圈子的切换而再次的执行,此时又跟 `logic_init()`等效。 `logic_init()`是根据切换不同的圈子,会重新执行,也包括初次加载的圈子都会执行一次的。也就是说,他是会跟着圈子的切换会重新再执行的。 `once()` 大家容易理解,只执行一次。 而 `logic_init()` `init()`如何区别使用呢?针对不同的圈子要做不同的处理,那就用`logic_init()` 因为他保证了每次进入新的圈子,都要进行逻辑判断。比如签到功能,每进入一个圈子,都要做判断处理的。局部界面的渲染与局部界面元素的事件绑定,就用 `init()`。因为有的UI(多页模式比如PC端)可能不再刷新局部界面,有的UI(SPA单页模式比如WAP端)可能需要重新加载界面。 特别要注意:局部界面与全局界面又不一样,全局是不会重复加载的,因为SPA单页模式刷新加载的新界面也只是部分而已。 那如何区别局部界面与全局界面呢?凡是往body元素插入内容都是全局,比如`$("body").append()` 有这种情况的,就不能使用`logic_init()` `init()` 只能使用 `once()` 避免换更圈子时出现异常。 以上所讲的,都是针对切换圈子的情况,不切换圈子,是不会发现异常的。 另外还有一个 ~~~ load_data.xxx= function(res,type){ } ~~~ `xxx` 是模块的关键字,这里代表每次加载到会话数据的时候执行的. type=='cknew'的时候,代表是新刷新出来的数据,否则就是第一页的数据。按下面的操作方法,那效果也等同于`logic_init()` ~~~ load_data.xxx= function(res,type){ if(type!='cknew'){ //这里执行的代码,效果等同于用logic_init() } } ~~~ 最后要讲一下`finish()` 这个函数或方法是在所有模块都加载完毕后才执行的。因为所有模块的加载顺序是不确定的,比如签到插件想在视频直播的时候就不显示,那么就只能用这个函数来处理,只有这个函数才能判断当前视频直播模块是否有视频数据在直播,因为这个时候所有模块都加载完毕了,才能进行判断。 这个也只执行一次,`once()` 中的代码,其实也可以放在这里执行,唯一的区别是,这里要等待所有模块加载完毕才执行,就是时间上要晚一些而已,本质上是没有区别,就是时间上的区别。