이 글은 vue를 사용하는 과정과 일부 커뮤니티 친구들이 묻는 질문을 요약한 것입니다. 관심 있는 친구들은 함께 배울 수 있습니다
이러한 상황은 생성된 라이프 사이클에서 종속 경로의 매개변수를 가져오고 작성하기 때문에 발생합니다. 동일한 경로가 두 번 또는 여러 번 로드되기 때문에 페이지를 종료하고 다른 기사에 진입할 수 없습니다. 페이지가 표시되지 않습니다. 생성된 구성 요소 라이프 사이클이 실행되어 기사 데이터가 처음으로 입력됩니다.
해결책: 경로가 변경되는지 모니터링하세요.
watch: {
// 方法1
'$route'
(to,
from
) {
//监听路由是否变化
if
(
this
.$route.
params
.articleId){
// 判断条件1 判断传递值的变化
//获取文章数据
}
}
//方法2
'$route'
(to,
from
) {
if
(to.path ==
"/page"
) {
/// 判断条件2 监听路由名 监听你从什么路由跳转过来的
this
.message =
this
.$route.query.msg
}
}
}//setTimeout/setInterval ajax Promise等等
data(){
return
{
...
}
},
methods (){
setTimeout(
function
() {
//其它几种情况相同
console.log(
this
);
//此时this指向并不是vue实例 导致操作的一些ma'f
},
1000
);
}해결책: 변수 할당 및 화살표 함수에 사용될 때 vue 인스턴스 객체를 가리킬 수 없습니다. (참고: var와 let의 차이점: http://www.jb51.net/article/134704.htm)
//使用变量访问this实例
let
self
=
this
;
setTimeout(
function
() {
console.log(
self
);
//使用self变量访问this实例
},
1000
);
//箭头函数访问this实例 因为箭头函数本身没有绑定this
setTimeout(() => {
console.log(
this
);
},
500
);For 예를 들어 일부 폭탄 화면, 회전 텍스트는 정기적으로 호출해야 합니다. 경로 점프 후 구성 요소는 파괴되었지만 setInterval은 파괴되지 않았고 백그라운드 호출이 계속 진행되기 때문에 콘솔은 계속해서 오류를 보고합니다. . 계산량이 많으면 시간 내에 클리어할 수 없어 심각한 페이지 정지 현상이 발생합니다.
해결책: 구성 요소 수명 주기에서 setInterval을 Destroy하기 전에 중지하세요
//组件销毁前执行的钩子函数,跟其他生命周期钩子函数的用法相同。
beforeDestroy(){
//我通常是把setInterval()定时器赋值给this实例,然后就可以像下面这么停止。
clearInterval(
this
.intervalId);
},사용 프런트엔드 라우팅, 새 경로로 전환할 때 페이지를 다시 로드하는 것처럼 페이지를 위로 스크롤하거나 원래 스크롤 위치를 유지하려는 경우. vue-router가 이를 수행할 수 있지만 더 좋은 점은 경로를 전환할 때 페이지 스크롤 방법을 사용자 정의할 수 있다는 것입니다.
참고: 이 기능은 History.pushState를 지원하는 브라우저에서만 사용할 수 있습니다.
라우팅 설정은 다음과 같습니다. (자세한 내용은 여기를 클릭하세요: https://router.vuejs.org/zh-cn/advanced/scroll-behavior.html)
const
router =
new
VueRouter
({
mode:
'history'
,
scrollBehavior (to,
from
, savedPosition) {
if
(savedPosition) {
//如果savedPosition存在,滚动条会自动跳到记录的值的地方
return
savedPosition
}
else
{
return
{ x:
0
, y:
0
}
//savedPosition也是一个记录x轴和y轴位置的对象
}
},
routes: [...]
})시나리오: 사용자가 실수로 닫기 버튼을 클릭하는 등 실수로 입력된 정보(핵심 정보)가 표시되지 않는 것을 방지하기 위해 저장되고 있습니다.
사용법:
//在路由组件中:
...
beforeRouteLeave (to,
from
,
next
) {
if
(用户已经输入信息){
//出现弹窗提醒保存草稿,或者自动后台为其保存
}
else
{
next
(
true
);
//用户离开
}
}beforeEach 및 beforeRouteUpdate와 같은 수명 주기 기능도 있습니다. 자세한 내용을 보려면 여기를 클릭하세요: https://router.vuejs.org/zh-cn/advanced/navigation-guards.html
v -once 이 명령은 모든 사람이 거의 사용하지 않는 명령이지만 개인적으로 꽤 실용적이라고 생각합니다!
요소와 구성요소를 한 번만 렌더링하세요. 이후에 다시 렌더링할 때 요소/구성 요소와 모든 하위 요소는 정적 콘텐츠로 처리되어 건너뜁니다. 이는 업데이트 성능을 최적화하는 데 사용될 수 있습니다.
여기서 예를 제시하지는 않겠습니다. 여기를 클릭하세요: v-once (https://cn.vuejs.org/v2/api/#v-once)
이 로컬 프록시는 개발 환경에서 도메인 간 문제를 해결하는 데 사용됩니다. 프록시는 vue에서 프록시를 구성하는 것이 매우 간단합니다. :
//比方说你要访问 http://192.168.1.xxx:8888/backEnd/paper这个接口
//配置 config.js下面proxyTable对象
proxyTable: {
'/backEnd'
:{
target:
'http://192.168.3.200:8888'
,
//目标接口域名有端口可以把端口也写上
//或者prot本地起服务端口与服务端统一
changeOrigin:
true
,
}
},
// 发送request请求
axios.
get
(
'/backEnd/page'
)
//按代理配置 匹配到/backEnd就代理到目标target地址
.
then
((res) => {
console.log(res)
// 数据完全拿得到 配置成功
this
.newsList = res.data
}, (err) => {
console.log(err)
})프론트 엔드 라우팅으로 인해 단일 페이지 애플리케이션은 nginx 또는 apache, tomcat 및 기타에 배치되어야 합니다. 웹 프록시 서버 절대 index.html에 직접 접근하지 말고, 동시에 자신의 지시를 따르세요. 서버의 프로젝트 경로는 반응 또는 vue의 라우팅 주소를 변경합니다.
주의 사항:
vue-router의 기록 모드
Service nginx 구성
위 내용은 제가 모든 사람을 위해 정리한 내용입니다. 앞으로 모든 사람에게 도움이 되기를 바랍니다. .
관련 기사:
js에서 정의된 변수 let과 var의 차이점은 무엇인가요?
veloticy-ui는 텍스트 애니메이션 효과를 구현합니다
위 내용은 VUE 개인 요약(발생한 문제)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!