onBeforeMount(() => { window.addEventListener('click', execClick) //绑定全局点击事件 // centerTitle.value = navObj[commonStore.navIdx] if (sessionStorage.getItem('center-title')) { let titleInfo = JSON.parse(sessionStorage.getItem('center-title')) centerTitle.value = navObj[titleInfo.title] flagIndex.value = titleInfo.index } userInfo.value = JSON.parse(localStorage.getItem('userInfo')) commonStore.setManageName(userInfo.value.F_name) switch (userInfo.value.F_category) { case 0: cityName.value = userInfo.value.F_cityName break case 1: cityName.value = userInfo.value.F_countyName.replace(/\]|\[/g, '') break case 2: cityName.value = userInfo.value.F_cityName break } }) 解释一下这段代码
时间: 2024-03-28 13:39:26 浏览: 18
这段代码是 Vue.js 中的生命周期函数 `onBeforeMount` 的回调函数。它会在组件挂载之前执行。
在这个回调函数中,首先绑定了一个全局点击事件 `execClick`,当用户点击页面中的任意位置时,这个函数会被触发。
接下来,代码判断了是否有保存在 sessionStorage 中的 `center-title` 数据,如果有,则将其解析成对象并更新 `centerTitle` 和 `flagIndex` 的值。
然后,代码从 localStorage 中获取名为 `userInfo` 的数据,并将其解析成对象,更新 `userInfo` 的值。
接着,代码根据 `userInfo` 中的 `F_category` 的值来更新 `cityName` 的值,具体来说,如果 `F_category` 为 0,则 `cityName` 的值为 `F_cityName`;如果 `F_category` 为 1,则 `cityName` 的值为 `F_countyName` 去掉中括号;如果 `F_category` 为 2,则 `cityName` 的值也为 `F_cityName`。
最后,代码调用了 `commonStore.setManageName` 方法,将 `userInfo.value.F_name` 作为参数传递给它,这个方法会更新全局状态管理器 `commonStore` 中的 `manageName` 值。
相关问题
优化一下这段代码//1、获取元素 var one = document.querySelector('.one') var two = document.querySelector('.two') //2、绑定滚动事件 window.onscroll = function () { //2-1,获取浏览器卷去的高度 var height = document.documentElement.scrollTop || document.body.scrollTop //2-2,判断卷去的高度 if (height >= 300) { //显示 two.style.display = 'block' } else { //隐藏 two.style.display = 'none' } } //3,绑定点击事件 two.onclick = function () { //3-1,让页面滚动回到顶部 window.scrollTo({ top: 0, behavior: 'smooth' }) }
可以进行如下优化:
1. 将获取元素的代码封装成一个函数,方便复用;
2. 采用事件监听的方式代替直接给window对象绑定事件,避免冲突和覆盖;
3. 在滚动事件中,使用节流或防抖函数进行优化,避免事件频繁触发;
4. 在滚动事件中,判断当前滚动位置是否已经到达目标位置,如果是,就不再执行后面的代码;
5. 使用ES6的语法简化代码。
优化后的代码如下:
```javascript
// 1、封装获取元素的函数
const $ = selector => document.querySelector(selector)
// 2、使用事件监听代替直接绑定事件
window.addEventListener('scroll', throttle(() => {
// 2-1、获取浏览器卷去的高度
const scrollTop = document.documentElement.scrollTop || document.body.scrollTop
// 2-2、判断卷去的高度
if (scrollTop >= 300) {
// 显示
$('.two').style.display = 'block'
} else {
// 隐藏
$('.two').style.display = 'none'
}
}), 300)
// 3、给回到顶部按钮绑定点击事件
$('.two').addEventListener('click', () => {
// 3-1、让页面滚动回到顶部
window.scrollTo({
top: 0,
behavior: 'smooth'
})
})
// 节流函数
function throttle(func, wait) {
let timer = null
return function () {
if (!timer) {
timer = setTimeout(() => {
func.apply(this, arguments)
timer = null
}, wait)
}
}
}
```
注:上述代码使用了节流函数进行优化,每隔300毫秒才会执行一次滚动事件的回调函数。
let data = []; // 搜索的数据 const searchInput = document.getElementById("search"); const searchResult = document.getElementById("search-result"); // 从数据文本中解析出搜索数据 fetch("data.txt") .then((response) => response.text()) .then((text) => { data = text.split("\n").filter((item) => item.trim() !== ""); }) .catch((error) => console.error(error)); searchInput.addEventListener("input", (event) => { const keyword = event.target.value.trim(); // 获取输入框中的值并去除首尾空格 if (!keyword) { searchResult.innerHTML = ""; // 关键词为空,清空下拉列表 return; } const matchedData = data.filter((item) => item.includes(keyword) ); // 过滤出匹配的数据 if (matchedData.length === 0) { searchResult.innerHTML = "<li>无匹配结果</li>"; // 没有匹配的数据 } else { searchResult.innerHTML = matchedData .map((item) => `<li>${item}</li>`) .join(""); // 根据匹配的数据渲染下拉列表 } }); searchResult.addEventListener("click", (event) => { if (event.target.tagName === "LI") { searchInput.value = event.target.innerText; searchResult.innerHTML = ""; // 选中下拉列表中的内容,清空下拉列表 } }); 将这段内容中的数据解析换一种写法,其中能够正常解析出文本数据
可以将获取数据的部分改为使用XMLHttpRequest对象进行异步请求,如下所示:
```javascript
let data = []; // 搜索的数据
const searchInput = document.getElementById("search");
const searchResult = document.getElementById("search-result");
// 从数据文本中解析出搜索数据
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
data = this.responseText.split("\n").filter((item) => item.trim() !== "");
}
};
xhr.open("GET", "data.txt");
xhr.send();
searchInput.addEventListener("input", (event) => {
const keyword = event.target.value.trim(); // 获取输入框中的值并去除首尾空格
if (!keyword) {
searchResult.innerHTML = ""; // 关键词为空,清空下拉列表
return;
}
const matchedData = data.filter((item) =>
item.includes(keyword)
); // 过滤出匹配的数据
if (matchedData.length === 0) {
searchResult.innerHTML = "<li>无匹配结果</li>"; // 没有匹配的数据
} else {
searchResult.innerHTML = matchedData
.map((item) => `<li>${item}</li>`)
.join(""); // 根据匹配的数据渲染下拉列表
}
});
searchResult.addEventListener("click", (event) => {
if (event.target.tagName === "LI") {
searchInput.value = event.target.innerText;
searchResult.innerHTML = ""; // 选中下拉列表中的内容,清空下拉列表
}
});
```
这里使用XMLHttpRequest对象对data.txt进行异步请求,当请求成功后,将返回的文本数据解析为数组并赋值给data变量。