vue๋ฅผ ๋จ์ผ ํ์ด์ง ์์ฉ ํ๋ก๊ทธ๋จ์ผ๋ก ์ฌ์ฉํ ๋ ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ์ ํ๋ ๋ ์ ํ์ ์ํ ํญ์ ๋์ ์ผ๋ก ์์ฑํ๋ ํจ๊ณผ๋ฅผ ์ป์ผ๋ ค๊ณ ํฉ๋๋ค. ์ด์์์ ๋ ๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋๋ฌด ํฝ๋๋ค. ์ ํ ๊ฐ๋ฅํ ํญ์ด ์ต๋ 10๊ฐ์ด๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์๋ฅผ ๋ค์ด ์ด์ ์๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ํด๋น ํญ์ ์๋์ผ๋ก ๋ซ๊ณ ๊ทธ์ ๋ฐ๋ผ ์บ์๋ ๊ตฌ์ฑ ์์๋ฅผ ์ง์ฐ๊ณ ์ถ์ต๋๋ค.
์: vm.$clearKeepAlived(routerName)
์ฌ์ค, ํฌ๋ผ์์ ์ด ์ง๋ฌธ์ ํ ๋ฒ ๋๋ตํ๊ธฐ ์ ์ keep-alive
of include
๋๋ exclude
๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ ์์ต๋๋ค.
๊ฐ๋จํ ์๋ฅผ ์์ฑํ๋ ค๋ฉด:
https://jsfiddle.net/jingkaizhao/m5tLg7wt/2/
์ด๊ฒ์ #6259์ ๋ณต์ ๊ฐ ์๋๋๊น?
@posva ๋ค, ๋น์ทํ ์ํฉ์
๋๋ค. ๋ฐํ์ ์ค์ keep-alive
์บ์๋ฅผ ๋์ ์ผ๋ก ์ง์ฐ๋ ค๊ณ ํฉ๋๋ค.
@jkzing ๋๋จํ ๊ฐ์ฌํฉ๋๋ค. ๊ทํ์ ๋ฐฉ๋ฒ์ ์์์ ์ธ๊ธํ ์๋๋ฆฌ์ค๋ฅผ ์๋ฃํ ์ ์์ด์ผ ํ์ง๋ง ๋ชฉ๋ก ํ์ด์ง์ ๊ฐ์ ์๋๋ฆฌ์ค๊ฐ ์์ง ํญ์์ ์ ํ๋๋ฉด ์ฐ๊ฒฐ ์ ์ง๊ฐ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ํ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ๋ฐ์ดํฐ๋ฅผ ์ป์ผ๋ ค๊ณ ํ๋ก๊ทธ๋จ์ด ๋ชฉ๋ก ํ์ด์ง๋ก ์ ํํ๋ฉด ํ์ด์ง๊ฐ ์๋ฃ๋ ํ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ๋ฐ์ดํฐ๋ฅผ ์ป์ ์ ์์ง๋ง ๋๋ ์ถฉ๋ถํ ์ฐ์ํ์ง ์์ต๋๋ค.์์ API๊ฐ ์์ผ๋ฉด ์์ ํ ํ์๋ง ๋ณ๊ฒฝํ๋ฉด ๋ฉ๋๋ค.์ด ๋ผ์ฐํฐ์ ์ฐ๊ฒฐ ์ ์ง๊ฐ ์ง์์ง๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๊ฐ์ ธ์์ผ ํฉ๋๋ค. ์ ๊ฐ ๋ง์๋๋ฆฐ ๋ด์ฉ์ด ์ดํด๊ฐ ๋์ค๋ฐ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์์ปจ๋, ์ด์ iframe์ ๋ฉํฐํญ ํจ๊ณผ์ ๊ฐ์ ๋จ์ผ ํ์ด์ง ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฐ์ํ๊ฒ ๋ง๋ค ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@okjesse ์ด ์์
๋ ์ํํ ์ ์์ต๋๋ค. include
๋๋ exclude
๋ฅผ ์์ ๊ตฌ์ฑ ์์๋ก ์
๊ทธ๋ ์ด๋ํ๊ฑฐ๋ vuex๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ vuex ์คํ ์ด์ include
ํ๋ฉด ๋ฉ๋๋ค. .
๊ฐ๋จํ ๋งํด์ Vue๋ ์ด๋ฅผ ์ํด ๊ธฐ๋ณธ์ ์ธ API๋ฅผ ์ ๊ณตํ๋๋ฐ, ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๋ ค๋ฉด ์ฝ๊ฐ ์บก์ํํด์ผ ํฉ๋๋ค.
@jkzing ์ดํด, ๊ฐ์ฌํฉ๋๋ค. ์ด์ ํผ์ ์ฐ๊ฒฐ ์ ์ง ๊ตฌํ์ ์์ฑํ๊ณ ์์ต๋๋ค. ๊ทํ์ ๋ฐฉ๋ฒ์ ๋ฐ๋ฅด๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค.
@jkzing , ํ์ง๋ง ์ด๊ฒ์ด ๊ฐ๋ฅํ๋๋ผ๋ ์ด api๋ฅผ ๊ฐ๋ ๊ฒ์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ฏธ๊ฐ ๋ค๋ฅผ ๊ฒ์ ๋๋ค. ๋ด๊ฐ ์ํ๋ ๊ฒ์ ์ ์ง๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ฐ๊ณ ๊ตฌ์ฑ ์์ ์์ฒด๊ฐ ์ฌ์ ํ ์ด์ ์๋ ๊ฒ์ ๋๋ค. ์ค์์น๊ฐ ์ด์์๋์ง ์ฌ๋ถ
์ด๊ฒ์ ๋ฌธ์ ์ค ํ๋์ ๋๋ค. ์๋ก์ด ํ์ด์ง๋ฅผ ๊ณ์ ์ด๋ฉด ๋๋ฌด ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฐ์ํ๊ณ ๊ฒฐ๊ตญ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ง๋ฉ๋๋ค. Keepalive์ ๊ด๋ จ์ด ์์ด์ผ ํฉ๋๋ค.๊ฐ๋ฅํ๋ค๋ฉด ํ์์ ์ฌํํ์ฌ @jkzing์๊ฒ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ฌ์ฑํ๊ณ ์ ํ๋ ๊ฒ์ ํ์ด์ง๋ก ์ ํํ๊ธฐ ์ง์ ์ ์บ์๋ ํ์ด์ง๋ฅผ ์ฌ์ฉํ ์ง ์๋๋ฉด ์ ํ์ด์ง๋ฅผ ์ฌ์ฉํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ ๋๋ค.์ค๋๋ API๋ ํ ์ ์์ต๋๋ค
๋๋ ๋ํ ์ด ์๊ตฌ ์ฌํญ์ ์ง๋ฉดํ์ต๋๋ค.๊ทธ๋ฐ ๋ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ๋ฉ๋ด ๋ชฉ๋ก์ ํด๋ฆญํ๊ณ ํญ์ ๋ ์ด๋ธ์ ์ถ๊ฐํ๊ณ ์๋ก ์ด๋ฆฐ ๊ตฌ์ฑ ์์๋ฅผ ์บ์ํ์ต๋๋ค. ๋ซ๊ธฐ ๋ ์ด๋ธ์ ํด๋ฆญํ๋ฉด ์บ์๋ ๊ตฌ์ฑ ์์๋ฅผ ์ญ์ ํ๊ณ ์ถ์ต๋๋ค. ๊ตฌ์ฑ ์์์ ๋นํ์ฑํ๋ ํํฌ ๊ธฐ๋ฅ destroy(); ์ด๊ฒ์ ์บ์๋ฅผ ์ง์ธ ์ ์์ง๋ง ๋ค์์ ์ฐ๊ฒฐ์ด ์ด๋ฆด ๋ ์ ๊ตฌ์ฑ ์์๊ฐ ์บ์๋์ง ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
@fadexiii ๋์ ์ผ๋ก ์ค์ ํ์ฌ ๋ฌ์ฑํ ์ ์๋ ๊ธฐ์กด ๋ฐฉ๋ฒ์ ํด๊ฒฐํ์ต๋๋ค.
@okjesse ๋ด ์ฐ๊ฒฐ ์ ์ง์๋ <router-view></router-view>
ํฌํจ๋์ด ์์ต๋๋ค.
@okjesse ๋ฐฉ๊ธ conponent์ name ์์ฑ์ ์ ์ํ์ง ์์์ต๋๋ค. ์ ์ ํ์๋ ๊ด์ฐฎ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
์ฐธ๊ณ : 2cba6d4cb1db8273ee45cccb8e50ebd87191244e์์ ๊ตฌํ๋จ
@fadexiii #6961 ๋น์ ๊ณผ ๊ฐ์ ์๊ตฌ ์ฌํญ์ ์ด๋ป๊ฒ ํด๊ฒฐํฉ๋๊น?
@Jack-93 keep-alive ํฌํจ์ ์ฌ์ฉํฉ๋๋ค. ์ ํ๊ทธ๊ฐ ์ด๋ฆฌ๋ฉด ํ์ฌ ๊ตฌ์ฑ ์์ ์ด๋ฆ์ด ํฌํจ ๋ฐฐ์ด์ ์ถ๊ฐ๋๊ณ ํ๊ทธ๊ฐ ๋ซํ ๋ ๋ซ๋ ํ๊ทธ์ ๊ตฌ์ฑ ์์ ์ด๋ฆ์ด ๋ฐฐ์ด์์ ์ญ์ ๋ฉ๋๋ค.
$destroy ๋ฉ์๋๋ฅผ ๋ณด๋ ์ปดํฌ๋ํธ์ ๋ค์ํ ์ฌ์ฉ์ ๋์์ ํตํด ํ์ด์ง๋ฅผ ๋ ๋ ๋ ์ปดํฌ๋ํธ๋ฅผ ์บ์ํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
(์๋ฅผ ๋ค์ด, ๋ฉ์์ง ๊ตฌ์ฑ ์์, ์ด ๊ตฌ์ฑ ์์๋ ๋ฉ์์ง๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ ์ถ๋ ํ ์ญ์ ๋์ด์ผ ํฉ๋๋ค. ์ ์ถ๋์ง ์์ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ๋ค์์ ๊ณ์ํด์ ์ฌ ์ ์๋๋ก ์บ์๋ฅผ ๋ณด๊ดํด์ผ ํฉ๋๋ค.)
๊ทธ๋ฌ๋ ํ๊ดด ํ ์ด ๊ตฌ์ฑ ์์์ ๋ค์ ์ก์ธ์ค๋ฅผ ๋ฐ๋ณตํ๋ฉด ์ด์ํ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ๊ณ ๊ตฌ์ฑ ์์๋ฅผ ๋ ์ด์ ์บ์ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@wanyaxing ๋๋ ๋น์ ๊ณผ ๋น์ทํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ฐ๊ฒฐ ์ ์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ์ ๊ตฌ์ฑ ์์๋ฅผ ์บ์ํ์ต๋๋ค. ๋ชฉ๋ก ํ์ด์ง A---"์ธ๋ถ ์ ๋ณด ํ์ด์ง B---" 3๋จ๊ณ ํ์ด์ง D. ์์ผ๋ก ์ด๋ํ ๋ I All Opened ๊ฒฝ๋ก๋ sessionStorage์ ์ ์ฅ๋๋ฉฐ, ๋์์ฌ ๋ ๋ค์ ๊ฒฝ๋ก๊ฐ sessionStorage์ ์๋์ง ํ๋จํ์ฌ ํ์ฌ ์ธ์คํด์ค๋ฅผ ํ๊ธฐํฉ๋๋ค.
์ด ๊ฒฝ์ฐ ์ฒ์์๋ ๋ฌธ์ ๊ฐ ์๊ณ ์ ์์ ์ผ๋ก ์คํ๋ ์ ์์ผ๋ฉฐ, 2ํ ์ด์ ์ดํ์๋ B๊ฐ ์ฌ๋ฌ ๋ฒ ์บ์ฑ๋๋ฉฐ D์์ B๋ก ๋์์ฌ ๋๋ง๋ค ์๋ก์ด B๊ฐ ์์ฑ๋๊ณ , ์ด์ ์ ์บ์๋ B๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ฌ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์์ต๋๋ค.
ํต์ฌ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@realfly08 ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด PR์ ์ ์ถํ๋ ค๊ณ ํ์ผ๋ ์ ์ถ์ ์คํจํ ๊ฒ ๊ฐ์ต๋๋ค -https :
์ ๋ ์ด์ ์ ์ฌ์ดํธ ์ ์ฒด ์บ์๋ฅผ ์ค๋นํ๋ค๊ฐ ๋
ผ๋ฆฌ์ ์ธ ์บ์ ์
๋ฐ์ดํธ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ด์ ์ ์ฒด ์ฌ์ดํธ ์บ์๋ฅผ ํฌ๊ธฐํ๊ณ ํค ์์ ํ์ด์ง์ ์บ์๋ง ์ผ๊ณ ํ์ฌ ํ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์ง ์ฌ๋ถ๋ฅผ ์ฝ๋์์ ๋์ ์ผ๋ก ํ๋จํฉ๋๋ค. ์ด๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ผ์์ ์ผ๋ก ๊ฑด๋๋ฐ์ง๋ง ์ฌ์ ํ ๋
ผ๋ฆฌ๊ฐ ๋ถ์กฑํฉ๋๋ค.
@wanyaxing ์ ๋ ๋น์ทํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ตฌํํด์ผ ํ ๋ ผ๋ฆฌ ํจ์๋ A->B->C 3 ํ์ด์ง์ ๋๋ค. ์บ์๋ฅผ ๋ฐํํ ๋ ์ฌ์ฉํ๊ณ ๋ค์ ์ ๋ ฅํ ๋ ๋ค์ ๋ ๋๋งํฉ๋๋ค. ํ์ฌ ๊ฐ ํ์ด์ง๋ ํ์ฑ ์ํ๋ก ์ ์ง๋ฉ๋๋ค. , ๊ทธ๋ฆฌ๊ณ ๋๋ ํ์ด์ง B์์ ํ๋จํ๋ค. ์ด์ ํ์ด์ง๋ก ๋์๊ฐ๋ ค๋ฉด(go -1), ๋นํ์ฑํ๋ ์ํ์์ ํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ํ๊ดดํ๊ณ $destroy๋ฅผ ํธ์ถํ๋ค. ๋ค์ ํ์ด์ง C์ ์์๋๋ก ๋ค์ด๊ฐ๋ฉด ํ์ด์ง B๋ก ๋์๊ฐ๋ค. , B ํ์ด์ง๊ฐ ๋ค์ ์์ฑ ๋ ๊ฒ์ ๋ณผ ์ ์์ผ๋ฉฐ ๋์์ ์บ์์ B ํ์ด์ง๊ฐ ์์ต๋๋ค.
https://www.jianshu.com/p/cd1baf5b03b0
๋๋ ์ด๊ฒ์ ์ปดํ์ผํ๋ค
@fadexiii ์ฐ๊ฒฐ ์ ์ง ๋ผ์ฐํฐ ๋ณด๊ธฐ์ ํจ๊ป ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
<keep-alive :include="includes">
<router-view></router-view>
</keep-alive>
ํฌํจ์ ๋ผ์ฐํ ๊ตฌ์ฑ์ ์ด๋ฆ์ ์๋๋ค. '๋ก๊ทธ์ธ'
const router = new Router({
routes: [
{
path: '/login',
name: 'login',
component: Login
}]
})
๋น ๋ฌธ์์ด์ ํฌํจ์ ํ ๋นํ๋๋ฐ ์ฌ์ ํ ์บ์๋ ์ ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?๋ด ์๊ตฌ ์ฌํญ์ ์บ์ ๋ ๊ฒฝ๋ก๋ฅผ ์๋์ผ๋ก ํ๊ดดํ๋ ๊ฒ์ ๋๋ค.
์ปดํฌ๋ํธ๊ฐ ํ๊ดด๋ ํ ์บ์๊ฐ ๋น์์ง์ง ์๋๋ฐ ๋ฌธ์ ๊ฐ ์ฌ๊ธฐ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ๋ก์ ํธ ๋ด๋น์๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด include์ ๊ฐ์ ์์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์ง์ ์ ์ผ๋ก ํ๊ดด๋์ง๋ ์์ต๋๋ค. ๊ธฐ์ต๋ ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
@wanyaxing ์ ์ ์ถํ PR์ ์ฝ์์ต๋๋ค. ์ ํจํด์ผ ํฉ๋๊น, ์๋๋ฉด ์บ์ ์ ๊ฑฐ API๋ฅผ ์ด์ด์ผ ํฉ๋๊น?
@leixu2txtek ๊ทธ PR์ ํฌ๊ธฐํ๊ณ ๊ฐ์ ๋ก ์บ์๋ฅผ ์ง์์ ๊ฐ์ฅ ๋์ ์ผ๋ก ์บ์ ๊ตฌ์ฑ์์๋ฅผ ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค.
ํ์ฌ ์ฌ์ดํธ ์ ์ฒด์์ ์บ์ฑ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, ํ์ด์ง ์ดํ์ ๋ผ์ฐํ ์ด๋ฒคํธ๋ฅผ ๊ฐ๋ก์ฑ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ฐ๋ผ ์บ์๋ฅผ ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์์ต๋๋ค.๋ค์ ์ฝ๋ ์ค๋ํซ์ ์ฐธ๊ณ ์ฉ์ ๋๋ค.
<keep-alive><router-view class="transit-view"></router-view></keep-alive>
routes: [
{ path: '/', redirect:'/yingshou', },
{ path: '/yingshou', meta:{rank:1.5,isShowFooter:true}, },
{ path: '/contract_list', meta:{rank:1.5,isShowFooter:true}, },
{ path: '/customer', meta:{rank:1.5,isShowFooter:true}, },
{ path: '/wode', meta:{rank:1.5,isShowFooter:true}, },
{ path: '/yingfu', meta:{rank:1.5,isShowFooter:true}, },
{ path: '/yingfu/pact_list', meta:{rank:2.5}, },
{ path: '/yingfu/pact_detail', meta:{rank:3.5}, },
{ path: '/yingfu/expend_view', meta:{rank:4.5}, },
{ path: '/yingfu/jizhichu', meta:{rank:5.5}, },
{ path: '/yingfu/select_pact', meta:{rank:6.5}, },
{ path: '/yingfu/jiyingfu', meta:{rank:7.5}, },
]
Vue.mixin({
beforeRouteLeave:function(to, from, next){
if (from && from.meta.rank && to.meta.rank && from.meta.rank>to.meta.rank)
{//ๅฆๆ่ฟๅไธไธๅฑ๏ผๅๆงๆฏๆฌๅฑ็ผๅญใ
if (this.$vnode && this.$vnode.data.keepAlive)
{
if (this.$vnode.parent && this.$vnode.parent.componentInstance && this.$vnode.parent.componentInstance.cache)
{
if (this.$vnode.componentOptions)
{
var key = this.$vnode.key == null
? this.$vnode.componentOptions.Ctor.cid + (this.$vnode.componentOptions.tag ? `::${this.$vnode.componentOptions.tag}` : '')
: this.$vnode.key;
var cache = this.$vnode.parent.componentInstance.cache;
var keys = this.$vnode.parent.componentInstance.keys;
if (cache[key])
{
if (keys.length) {
var index = keys.indexOf(key);
if (index > -1) {
keys.splice(index, 1);
}
}
delete cache[key];
}
}
}
}
this.$destroy();
}
next();
},
});
์์ฝ: ์ฌ์ค ํ์ด์ง ์ปดํฌ๋ํธ๊ฐ ์์นํ ์์ keepAlive ์ปดํฌ๋ํธ๋ฅผ ํตํด ๊ฐ์ฒด์ ์บ์ ๋ฆฌ์คํธ๋ฅผ ๋ํญํ๊ฒ ์กฐ์ํ๋ค. . .
์ฌํํ๊ณ ์ง์ค์ ์ด์ง๋ง ์์ฃผ ๊ณ ๊ธ์ค๋ฝ์ง ์์๋ ์ฌ์ฉํ๊ธฐ ํธํด์ ใ ใ ใ :)
๋ฌผ๋ก ์์ง๊น์ง๋ ๊ณต์ ์ง์ API๊ฐ ๋ ์ ๋์์ผ๋ฉด ํ๋ ๋ฐ๋จ์ ๋๋ค.
@wanyaxing ๋ผ์ฐํ ์ ํตํด ํ์ด์ง ์บ์ฑ์ ์ ์ดํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋๋ /executed/์ ๊ทธ์ ์์ ๋ผ์ฐํธ /executed/chart/๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ํ ๋ฃจํธ๊ฐ ๋ ๋ ๋ ์บ์ํ ํ์๊ฐ ์๋ ๊ตฌ์ฑ ์์๋ฅผ ํ๊ดดํ๊ธฐ ์ํด mixin ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ด๊ฐ ํ๊ณ ์ถ์ ๊ฒ์ ๋ผ์ฐํธํ๋ ๊ฒ์ ๋๋ค. ํ์ ์งํฉ์ ๋ํ ์์ ์์ ํญ๋ชฉ์ ์บ์๋๊ณ ๋ค๋ฅธ ์กฐ๊ฑด์ ์๋ฉธ๋๋ฏ๋ก ์์ฑ์ ์ถ๊ฐํ์ง ์๊ณ ๋ผ์ฐํ ๋ง ์ ์ดํ๋ฉด ๋ฉ๋๋ค.
// ๆฏๆ้กต้ขไฟๆ
Vue.mixin({
beforeRouteLeave(to, from, next) {
if (!to.path.startsWith(from.path)) this.$destroy();
next();
}
});
@wanyaxing ๊ฐ์ฌํฉ๋๋ค. ๊ทํ์ ์ฝ๋๋ ์ ์๊ฒ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ๋ด๊ฐ ์ฐธ์กฐํ์
์บ์๊ฐ ํ๊ดด๋์ง ์์์์ ์์์ต๋๋ค.@LinusBorg ์ ์ํตํ๊ธฐ ์ํด ์ต์ ์ ๋คํ์ธ์
@wanyaxing ์ ๋ vue์ ํต์ฌ ์ฝ๋์ ์ต์ํ์ง ์์ ์บ์๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์์์ต๋๋ค. ๊ทํ์ ์ฝ๋๊ฐ ๋ ์ ์ฉํฉ๋๋ค. ํ ์คํธ๋ฅผ ํต๊ณผํ์ต๋๋ค. ์์ฃผ ์ข์ต๋๋ค. ์์๋ก ์ด ์์ ์ ์ํํฉ๋๋ค. ๊ณต๋ฌด์์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋ง์ ์ ๋ณด๋ฅผ ํ์ธํด๋ณธ ์ฌ๋์ด ๋ง์ง ์๋๊ณ ๋ฌผ์ด๋ณด๋ ์ด๋ฐ ์ ๋ฐ ๋ฌธ์ ๊ฐ
ใ
.
์ด๋ฅผ ๋ฐํ์ผ๋ก @leixu2txtek ์ https://github.com/wanyaxing/vue-router-then ๊ณผ ๊ฒฐํฉ๋ ํ๋ฌ๊ทธ์ธ์ ๊ถ์ฅํ๋ฉฐ ํจ๊ณผ๊ฐ ๋ ์ข์ต๋๋ค.
vue-router-then์ ์ฌ์ฉํ์ฌ ํ์ฌ ํ์ด์ง์์ ์๋ธํ์ด์ง๋ฅผ ์ด๋ฉด ํ์ฌ ํ์ด์ง์์ ์๋ธํ์ด์ง์ ์ ๋ณด๋ ์ด๋ฒคํธ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
this.$routerThen.push('/chose').then(vm => {})
๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์๋ฅผ ๋ค์ด, ์๋ฅผ ๋ค์ด ์ฃผ๋ฌธ ํ์ด์ง๋ฅผ ์์ฑํ ๋ ์ ํ์ ์ํด ์ฃผ์ ๋ชฉ๋ก์ ์ด์ด์ผ ํฉ๋๋ค.
<input v-model="price" v-model-link="'/select_address'" />
๊ทธ๋ฐ ๋ค์ /select_address์ ์ํด ์ด๋ฆฐ ๊ฒฝ๋ก์์ ์ฃผ์๋ฅผ ์ ํํ ํ ์ ๋ ฅ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ณ ํ์ด์ง๋ก ๋์๊ฐ๋๋ค.
<script>
methods:{
clickSomeOne:function(value){
this.$emit('input',value);
this.$router.go(-1);
},
}
</script>
์ด๊ฒ์ ์์์ ์ธ๊ธํ ์บ์ฑ ์ ๋ต์ ๊ธฐ๋ฐ์ผ๋ก ๋ถ๋ชจ์ ์์ ๋ผ์ฐํ ๊ฐ์ ์ง์ ์ ์ธ ์ํธ ์์ฉ์ด ํ์ํ์ง๋ง ๊ตฌํ ํ์๋ ๋งค์ฐ ํฅ๋ฏธ๋ก์ธ ๊ฒ์ ๋๋ค. ๊ฐ๋ฐ ์์ด๋์ด๋ ๋งค์ฐ ์ง๊ด์ ์ ๋๋ค. vuex์ ์์ ๋ฐ์ดํฐ ์ ์ฅ์ ๊ณ ๋ คํ ํ์๊ฐ ์์ต๋๋ค. , ํ์ด์ง๋ฅผ ์ด์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
@fadexiii ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ผ์ฐํฐ์ ํด๋นํ๋ ๊ตฌ์ฑ ์์์ ์ด๋ฆ์ ํฌํจํด์ผ ํ๋ค๋ ๋ป์ธ๊ฐ์?
---- ๋ผ์ฐํฐ.js ----
import ComponentA from 'views/a
export default [
{path: 'a', component: ComponentA, name: a}
]
---- ์กฐํ์/a.vue ----
export default {
name: 'xxxa'
}
include์ ์ ์ฅํด์ผ ํ๋ ๊ฒ์ ComponentA ๋๋ a ๋๋ xxxa์ ๋๊น?
@yiwuyu xxxa
@jkzing ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋ฒ ๋ถ๋ฌ์ฌ ๋ ํ๋๋ ์บ์ฑํ๊ณ ๋ค๋ฅธ ํ๋๋ ์บ์ฑํ โโํ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ปดํฌ๋ํธ ์ด๋ฆ์ด ๋์ผํฉ๋๋ค.
๋ํ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ถ๊ฐ
๋ฉํ: {
keepAlive: true // ์บ์ํด์ผ ํจ
}
๋ซ๊ธฐ๋ฅผ ํด๋ฆญํ๋ฉด false๋ก ์ค์
๊ทธ๋ฐ ๋ค์ ๋ฆฌ์ค๋๋ฅผ true๋ก ๋ณ๊ฒฝํ์ญ์์ค.
์์ธํ ๋ด์ฉ์ https://mp.csdn.net/postedit/82628953์ ์ฐธ๊ณ
ํญ์ด ์ ํ๋๋ฉด ์บ์๊ฐ ๋ซํ๊ณ ์บ์๊ฐ ํ๊ดด๋๋ฉฐ ๋ค์ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ์ค์ฒฉ๋ ํ์ ๋ผ์ฐํ ํ์ด์ง๋ฅผ ์ด๊ณ ๋ค์ ๋ก๋ํ ๋๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
์ฌ์ค, ํฌ๋ผ์์ ์ด ์ง๋ฌธ์ ํ ๋ฒ ๋๋ตํ๊ธฐ ์ ์
keep-alive
ofinclude
๋๋exclude
๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ ์์ต๋๋ค.๊ฐ๋จํ ์๋ฅผ ์์ฑํ๋ ค๋ฉด:
https://jsfiddle.net/jingkaizhao/m5tLg7wt/2/
์ด ์๋ฅผ ์ดํดํฉ๋๋ค. ์ฌ๊ธฐ์์ ์ ๋ค์๊ฒ ๋ฌป๊ณ ์ถ์ต๋๋ค. ์ ์ฌ์ ์ ์ด๋ฌํฉ๋๋ค. ์ผ์ชฝ์ ์ธ๋ก ํญ์ ๋๋ค. ์ด ํญ์ ์ฌ์ฉ์๊ฐ ๋์ ์ผ๋ก ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์์ต๋๋ค. ํญ ์ค ํ๋๋ฅผ ํด๋ฆญํ๋ฉด ์ค๋ฅธ์ชฝ์ ํด๋นํ๋ ํญ์ด ํ์๋ฉ๋๋ค. ํธ๋ฆฌ๋ ์ค์ ๋ก ๊ฐ์ ํธ๋ฆฌ์ด์ง๋ง ํธ๋ฆฌ์์ ์ ํํ ๋ ธ๋๊ฐ ๋ค๋ฆ ๋๋ค. ์ด๊ธฐ ์์ด๋์ด๋ ํญ ํญ๋ชฉ์ ์ถ๊ฐํ๊ณ ์ค๋ฅธ์ชฝ์ ํธ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค. ํญ์ ์ ํํ ๋ ํธ๋ฆฌ๊ฐ ์จ๊ฒจ์ง๊ณ ๊ทธ์ ๋ฐ๋ผ ํ์๋์ง๋ง(v-show), ๋ ๋ง์ ํญ์ด ์์ ๋ ๋ง์ ํธ๋ฆฌ๊ฐ ์์ ๊ฒ์ ๋๋ค. ์ค๋ฅธ์ชฝ์ ์๊ณ dom ๋ ธ๋๊ฐ ๋๋ฌด ๋ง์ต๋๋ค. ๋์คํ๋ ์ด๋ฅผ ์จ๊ธธ ํ์๊ฐ ์๊ณ v-if๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฅํ ์ ์๋ ํธ๋ฆฌ ์ํ(์ ํ๋จ, ํ์ฅ๋จ, ์คํฌ๋กค๋จ)๊ฐ ์์ผ๋ฏ๋ก ๋์ค์ ์๊ฐํ์ต๋๋ค. ์ํ๋ฅผ ์ ์ฅํ ์ ์๋ ์ฐ๊ฒฐ ์ ์ง. ํ์ง๋ง ์ ๋ vue์ ๋จ์ผ ํ์ผ ๊ตฌ์ฑ ์์์ ๋๋ค.ํญ์ ๋ฉ์ธ ํ์ด์ง์ ์์ต๋๋ค.ํธ๋ฆฌ๋ ๊ฐ์ ธ์ค๋ ๊ตฌ์ฑ ์์์ ๋๋ค.๊ฐ์ ธ์ค๊ธฐ๊ฐ ๋ค์ด์ค๋ฉด ๊ตฌ์ฑ ์์ ์์ฑ์ ์ง์ ๋ฑ๋ก๋ฉ๋๋ค.์ ๋ํด ์ฌ๋ฌ ์ด๋ฆ์ ๋ง๋ค๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์? ๊ฒ์ํ ๊ฐ์ ๋๋ฌด?? ํ์ง๋ง ์ฌ์ค ์ ๋ ์ปดํฌ๋ํธ์ผ ๋ฟ์ ๋๋ค. ์ผ์ชฝ ํญ์๋ง ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ด๋ฆ์ ๋ง๋ค์์ต๋๋ค. ๋ ์ ํํ๊ฒ๋ ์ผ์ชฝ ํญ ํญ๋ชฉ์ ์ญ์ ํ๋ ค๋ฉด keepalive์์ ์ด ํญ ํญ๋ชฉ์ ํด๋นํ๋ ํธ๋ฆฌ ๋ฒํผ๋ ์ญ์ ํด์ผ ํฉ๋๊น? ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
@leixu2txtek ๊ทธ PR์ ํฌ๊ธฐํ๊ณ ๊ฐ์ ๋ก ์บ์๋ฅผ ์ง์์ ๊ฐ์ฅ ๋์ ์ผ๋ก ์บ์ ๊ตฌ์ฑ์์๋ฅผ ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค.
ํ์ฌ ์ฌ์ดํธ ์ ์ฒด์์ ์บ์ฑ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, ํ์ด์ง ์ดํ์ ๋ผ์ฐํ ์ด๋ฒคํธ๋ฅผ ๊ฐ๋ก์ฑ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ฐ๋ผ ์บ์๋ฅผ ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์์ต๋๋ค.๋ค์ ์ฝ๋ ์ค๋ํซ์ ์ฐธ๊ณ ์ฉ์ ๋๋ค.
- ๋ผ์ฐํฐ ๋ณด๊ธฐ๋ฅผ ์ฐ๊ฒฐ ์ ์ง์ ๋ฃ์ผ๋ฉด ์ ์ฒด ์ฌ์ดํธ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์บ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
<keep-alive><router-view class="transit-view"></router-view></keep-alive>
- ๊ฒฝ๋ก์ ๋ชจ๋ ํ์ด์ง๋ฅผ ๋ ์ด์ด๋งํ์ต๋๋ค. ์๋ฅผ ๋ค์ด meta.rank๋ ํ์ด์ง ์์ค์ ๋ํ๋ด๋ฉฐ 1.5>2.5>3.5๋ ์ฒซ ๋ฒ์งธ ๋ ์ด์ด์์ ์ธ ๋ฒ์งธ ๋ ์ด์ด๋ก ๋ ๋ฒ์งธ ๋ ์ด์ด๋ก ์ง์ ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
routes: [ { path: '/', redirect:'/yingshou', }, { path: '/yingshou', meta:{rank:1.5,isShowFooter:true}, }, { path: '/contract_list', meta:{rank:1.5,isShowFooter:true}, }, { path: '/customer', meta:{rank:1.5,isShowFooter:true}, }, { path: '/wode', meta:{rank:1.5,isShowFooter:true}, }, { path: '/yingfu', meta:{rank:1.5,isShowFooter:true}, }, { path: '/yingfu/pact_list', meta:{rank:2.5}, }, { path: '/yingfu/pact_detail', meta:{rank:3.5}, }, { path: '/yingfu/expend_view', meta:{rank:4.5}, }, { path: '/yingfu/jizhichu', meta:{rank:5.5}, }, { path: '/yingfu/select_pact', meta:{rank:6.5}, }, { path: '/yingfu/jiyingfu', meta:{rank:7.5}, }, ]
- ๋ชจ๋ ํ์ด์ง๊ฐ ์บ์๋๊ธฐ ๋๋ฌธ์ ํต์ฌ ์์ด๋์ด๋ [์บ์๊ฐ ์ธ์ ํ๊ดด๋ ๊น์? ]. ๋ด ๋์์ธ์ ๋์ผํ ์์ค์์ ๋ค์ ํ์ด์ง๋ก ์ ํํ ๋ ํ์ฌ ํ์ด์ง ์บ์๊ฐ ์ ์ง๋๊ณ [์ด์ ํ์ด์ง๋ก ๋์๊ฐ ๋ ํ์ฌ ํ์ด์ง ์บ์๊ฐ ํ๊ดด๋จ]์ ๋๋ค.
- ๊ทธ๋์ main.js์์๋ Vue.mixin ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฝ๋ก ์ดํ ์ด๋ฒคํธ๋ฅผ ๊ฐ๋ก์ฑ๊ณ , ๊ฐ๋ก์ฑ๊ธฐ ๋ฉ์๋์์ ํ์ด์ง ์บ์๋ฅผ ํ๊ดดํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ํต์ฌ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Vue.mixin({ beforeRouteLeave:function(to, from, next){ if (from && from.meta.rank && to.meta.rank && from.meta.rank>to.meta.rank) {//ๅฆๆ่ฟๅไธไธๅฑ๏ผๅๆงๆฏๆฌๅฑ็ผๅญใ if (this.$vnode && this.$vnode.data.keepAlive) { if (this.$vnode.parent && this.$vnode.parent.componentInstance && this.$vnode.parent.componentInstance.cache) { if (this.$vnode.componentOptions) { var key = this.$vnode.key == null ? this.$vnode.componentOptions.Ctor.cid + (this.$vnode.componentOptions.tag ? `::${this.$vnode.componentOptions.tag}` : '') : this.$vnode.key; var cache = this.$vnode.parent.componentInstance.cache; var keys = this.$vnode.parent.componentInstance.keys; if (cache[key]) { if (keys.length) { var index = keys.indexOf(key); if (index > -1) { keys.splice(index, 1); } } delete cache[key]; } } } } this.$destroy(); } next(); }, });
์์ฝ: ์ฌ์ค ํ์ด์ง ์ปดํฌ๋ํธ๊ฐ ์์นํ ์์ keepAlive ์ปดํฌ๋ํธ๋ฅผ ํตํด ๊ฐ์ฒด์ ์บ์ ๋ฆฌ์คํธ๋ฅผ ๋ํญํ๊ฒ ์กฐ์ํ๋ค. . .
์ฌํํ๊ณ ์ง์ค์ ์ด์ง๋ง ์์ฃผ ๊ณ ๊ธ์ค๋ฝ์ง ์์๋ ์ฌ์ฉํ๊ธฐ ํธํด์ ใ ใ ใ :)
๋ฌผ๋ก ์์ง๊น์ง๋ ๊ณต์ ์ง์ API๊ฐ ๋ ์ ๋์์ผ๋ฉด ํ๋ ๋ฐ๋จ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์ง ์์ต๋๋ค. keepalive๋ฅผ ๋๋ฉด ์ ๋ฉ๋๋ค. keepalive๋ฅผ ์ถ๊ฐํ ๋ค์ ์๋์ผ๋ก ์บ์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๊ดดํ๋ ๊ฒ์ด ์ฌ์ ํ ์ฆ๊ฐํ๊ณ ์์ต๋๋ค. ์ด ๋ถ๋ถ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ จ๋์ง ๊ถ๊ธํฉ๋๋ค.
@Liudapeng ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ ๊ณต๋ถํ ์ ์ด ์์ด์ ๋๋ต์ ์ธ ํ ์คํธ๋ฅผ
์์ฆ ์ข ๋ฐ๋น ์ ์ดํ ์ ์ ๋น์ ์ ๋ฉ์์ง๋ฅผ ๋ณด๊ณ ๋ต์ฅ์ ๋ณด๋ผ ์๊ฐ์ด ์์์ด์.
ํ์ด์ง์ 5~6๊ฐ ์์ค์ผ๋ก ๊น์์ด ๋ค์ด๊ฐ ๋ค์ ํ ํ์ด์ง๋ก ๋์๊ฐ๊ธฐ ์ํด ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํ์ฌ ๋ ๋ค๋ฅธ ํ ์คํธ๋ฅผ ์ํํ์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํ์๋ผ์ธ์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฐ๊ฒฐ ์ ์ง๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค.
ํต์ผ๋ผ์ด๋ธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์คํ์ ๊ทธ๋ค์ง ๋น ๋ฅด์ง ์์ง๋ง ๊ณ์ํด์ ๋์์ง๊ณ ์์ต๋๋ค(๋ด ์ฝ๋๊ฐ ๊ธํ๊ฒ ๋ณ๊ฒฝ๋๊ณ ๋ค๋ฅธ ๊ณณ์์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์์ ์ ์์)
ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋์ ์๋ฉธ์ ์ฌ์ฉํ ํ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ฌ์ ํ โโํ์ฉ ๊ฐ๋ฅํ ๋ฒ์ ๋ด์ ์๋ค๊ณ ์๊ฐํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ํฌ๊ฒ ์ฆ๊ฐํ๋ ๊ฒฝ์ฐ ๊ตฌ์ฑ ์์๊ฐ ์๋ฉธ๋ ๋ ๋ฐ์ธ๋ฉ ์ด๋ฒคํธ๊ฐ ์๋ฉธ๋์ง ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๊ตฌ์ฑ ์์๋ keepAlive์ ์บ์ ๋ฐฐ์ด์์ ์ ๊ฑฐ๋์ง๋ง ๋ฉ๋ชจ๋ฆฌ์์ ์ญ์ ๋์ง ์์ต๋๋ค.
๋ค์ ํ์ธ ํด์ฃผ์ธ์.
@wanyaxing ๋ด ํ๋ก์ ํธ์ ์ฐ๊ฒฐ ์ ์ง ์์ด ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋์ ๊ตฌ์ฑ ์์์ $destory() ํธ์ถ์ด ์๋ํ์ง ์์ผ๋ฉฐ ๋
ธ๋ ์๊ฐ ๋ง์์๋ก JS ํ์ด ๋์์ง๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ๋์ ๊ตฌ์ฑ ์์๊ฐ DOM์ ํ๊ดดํ์ง ์๊ณ ์์ฑํ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
@bigggge ์ด๋ฆ์ ๊ฒฝ๋ก์ ์์ฑ์ด ์๋๋ผ ๊ตฌ์ฑ ์์ ๋ด๋ถ์ ์์ฑ์ ๋๋ค.
๋ด ์ง๋ฌธ์ ๋ ์ด์ํ๋ค. ๋ด vue ๋ฒ์ ์ 2.3.3์ ๋๋ค. ํ์ด์ง A์๋ ๋ค์ ํ์ด์ง๋ฅผ ๋ก๋ํ๊ธฐ ์ํด ์คํฌ๋กคํ๋ ์ฝ๋๊ฐ ์์ต๋๋ค. ํ์ด์ง A์์ ํ์ด์ง B๋ก ์ ํํ์ต๋๋ค. ํ์ด์ง B๋ฅผ ์คํฌ๋กคํ์ ๋ ํ์ด์ง A์์ ๋ค์ ํ์ด์ง๋ฅผ ๋ก๋ํ๋ ์ฝ๋๊ฐ ์ฌ์ ํ ์ฒํ๋ฉ๋๋ค. ์ ์ญ ์ฐ๊ฒฐ ์ ์ง๋ฅผ ์ ๊ฑฐํ๋ฉด ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ฑํ ๋ ๋ชจ๋ ๊ฒ์ด ๋ค์ ์ ํจํ์ง ์์ผ๋ฏ๋ก ์์ฑ์ ์ฌ์ฉํด์ผํฉ๋๋ค.
๋ด ์ง๋ฌธ์ ๋ ์ด์ํ๋ค. ๋ด vue ๋ฒ์ ์ 2.3.3์ ๋๋ค. ํ์ด์ง A์๋ ๋ค์ ํ์ด์ง๋ฅผ ๋ก๋ํ๊ธฐ ์ํด ์คํฌ๋กคํ๋ ์ฝ๋๊ฐ ์์ต๋๋ค. ํ์ด์ง A์์ ํ์ด์ง B๋ก ์ ํํ์ต๋๋ค. ํ์ด์ง B๋ฅผ ์คํฌ๋กคํ์ ๋ ํ์ด์ง A์์ ๋ค์ ํ์ด์ง๋ฅผ ๋ก๋ํ๋ ์ฝ๋๊ฐ ์ฌ์ ํ ์ฒํ๋ฉ๋๋ค. ์ ์ญ ์ฐ๊ฒฐ ์ ์ง๋ฅผ ์ ๊ฑฐํ๋ฉด ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ฑํ ๋ ๋ชจ๋ ๊ฒ์ด ๋ค์ ์ ํจํ์ง ์์ผ๋ฏ๋ก ์์ฑ์ ์ฌ์ฉํด์ผํฉ๋๋ค.
๊ธ๋ก๋ฒ ๋ชจ๋ํฐ๋ง์ผ๋ก ์ธํ ๊ฒ์ผ ์ ์์ผ๋ฉฐ, ์คํฌ๋กค ์ ํ์ฌ ๊ฒฝ๋ก์ธ์ง ํ๋จํ๊ณ ๋ค์ ํ์ด์ง ๋ก๋ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
๋ด ์ง๋ฌธ์ ๋ ์ด์ํ๋ค. ๋ด vue ๋ฒ์ ์ 2.3.3์ ๋๋ค. ํ์ด์ง A์๋ ๋ค์ ํ์ด์ง๋ฅผ ๋ก๋ํ๊ธฐ ์ํด ์คํฌ๋กคํ๋ ์ฝ๋๊ฐ ์์ต๋๋ค. ํ์ด์ง A์์ ํ์ด์ง B๋ก ์ ํํ์ต๋๋ค. ํ์ด์ง B๋ฅผ ์คํฌ๋กคํ์ ๋ ํ์ด์ง A์์ ๋ค์ ํ์ด์ง๋ฅผ ๋ก๋ํ๋ ์ฝ๋๊ฐ ์ฌ์ ํ ์ฒํ๋ฉ๋๋ค. ์ ์ญ ์ฐ๊ฒฐ ์ ์ง๋ฅผ ์ ๊ฑฐํ๋ฉด ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ฑํ ๋ ๋ชจ๋ ๊ฒ์ด ๋ค์ ์ ํจํ์ง ์์ผ๋ฏ๋ก ์์ฑ์ ์ฌ์ฉํด์ผํฉ๋๋ค.
๊ธ๋ก๋ฒ ๋ชจ๋ํฐ๋ง์ผ๋ก ์ธํ ๊ฒ์ผ ์ ์์ผ๋ฉฐ, ์คํฌ๋กค ์ ํ์ฌ ๊ฒฝ๋ก์ธ์ง ํ๋จํ๊ณ ๋ค์ ํ์ด์ง ๋ก๋ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
์, vue-infinite-scroll ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํฉ๋๋ค.๊ธ๋ก๋ฒ ์ฐ๊ฒฐ ์ ์ง๋ฅผ ์ฌ์ฉํ ๋ ๋ชจ๋ํฐ๋ง ์ด๋ฒคํธ๊ฐ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.์ด ํ๋ฌ๊ทธ์ธ์ ๋ค์ ์์ฑํ์ต๋๋ค.
์บ์ ์ง์ฐ๊ธฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด @wanyaxing ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉ
https://gist.github.com/lingceng/c204bac2704d03db99932d5457e662e6
@jkzing ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋ฒ ๋ถ๋ฌ์ฌ ๋ ํ๋๋ ์บ์ฑํ๊ณ ๋ค๋ฅธ ํ๋๋ ์บ์ฑํ โโํ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ปดํฌ๋ํธ ์ด๋ฆ์ด ๋์ผํฉ๋๋ค.
์ด ์ง๋ฌธ๋ ์์ต๋๋ค. Include๋ ์ด ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ๋ผ์ฐํ ํ์ด์ง๊ฐ ํ๋์ ๊ตฌ์ฑ ์์์ ํด๋นํ๋ ๊ฒฝ์ฐ ๊ตฌ์ฑ ์์ ์ด๋ฆ์ ํ๋๋ง ์์ต๋๋ค. ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
ํญ์ด ์ ํ๋๋ฉด ์บ์๊ฐ ๋ซํ๊ณ ์บ์๊ฐ ํ๊ดด๋๋ฉฐ ๋ค์ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ์ค์ฒฉ๋ ํ์ ๋ผ์ฐํ ํ์ด์ง๋ฅผ ์ด๊ณ ๋ค์ ๋ก๋ํ ๋๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
@heng1234์๋ ํ์ธ์ ์ด ๋ฌธ์ ๋ ํด๊ฒฐํ์ จ๋์? ์๋ด๋ฅผ ์ํด ์ฐ๋ฝ์ฒ๋ฅผ ๋จ๊ธธ ์ ์๋ ์ฌ๋์ ๋๊ตฌ์ธ๊ฐ์?
๋ผ์ฐํ
๋ฐ ๊ตฌ์ฑ ์์๋ก ์ ํํ์ฌ ํ์ด์ง๋ฅผ ์ ํํ์ง ๋ง์ญ์์ค.
https://blog.csdn.net/qq_39313596/article/details/82628953
๋ณด๋ธ์ฌ๋: Codezero123
์ ์ก ์๊ฐ: 2019-12-03 10:04
๋ฐ๋ ์ฌ๋: vuejs/vue
์ฐธ์กฐ: hlvy; ์ธ๊ธ
์ ๋ชฉ: Re: [vuejs/vue] keep-alive๊ฐ ์บ์๋ ๊ตฌ์ฑ ์์๋ฅผ ๋์ ์ผ๋ก ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ํฅ์์ํฌ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค(#6509).
ํญ์ด ์ ํ๋๋ฉด ์บ์๊ฐ ๋ซํ๊ณ ์บ์๊ฐ ํ๊ดด๋๋ฉฐ ๋ค์ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ์ค์ฒฉ๋ ํ์ ๋ผ์ฐํ
ํ์ด์ง๋ฅผ ์ด๊ณ ๋ค์ ๋ก๋ํ ๋๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
@heng1234์๋
ํ์ธ์, ์ด ํ์
จ๋์?
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์
๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ๋ณด๊ฑฐ๋ ๊ตฌ๋
์ ์ทจ์ํ์ธ์.
@wanyaxing ๋น์ ์ 3๋จ๊ณ ๋ผ์ฐํ
์บ์์ ํจ๊ณผ์ ์ด์ง ์์ต๋๋ค.์๋ฅผ ๋ค์ด vue-element-admin์์ ์ฌ๋ฌ 3๋จ๊ณ ํ๊ทธ ํ๊ทธ๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ ํ๊ทธ ํ๊ทธ๋ฅผ ์ ํํ๋ฉด ์บ์ ๊ตฌ์ฑ ์์๊ฐ ํ๊ดด๋์ง ์๊ณ 1/3๋ง ์ด๋ฆฝ๋๋ค. -๋ ๋ฒจ ๋ผ์ฐํ
ํ๊ทธ ํ๊ทธ. , ํ๊ดด๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์ menu1-0 ๋ฐ menu1-1์ ํ์ฑํํฉ๋๋ค.
๋ผ์ฐํ
.
{
path: '/nested',
component: Layout,
redirect: '/nested/menu1/menu1-1',
name: 'Nested',
meta: {
title: 'Nested Routes',
icon: 'nested'
},
children: [
{
path: 'menu1',
component: () => import('@/views/nested/menu1/index'), // Parent router-view
name: 'Menu1',
meta: { title: 'Menu 1' },
redirect: '/nested/menu1/menu1-1',
children: [
{
path: 'menu1-0',
component: () => import('@/views/nested/menu1/menu1-0'),
name: 'Menu1-0',
meta: { title: 'Menu 1-0', noCache: true }
},
{
path: 'menu1-1',
component: () => import('@/views/nested/menu1/menu1-1'),
name: 'Menu1-1',
meta: { title: 'Menu 1-1' }
},
{
path: 'menu1-2',
component: () => import('@/views/nested/menu1/menu1-2'),
name: 'Menu1-2',
redirect: '/nested/menu1/menu1-2/menu1-2-1',
meta: { title: 'Menu 1-2' },
children: [
{
path: 'menu1-2-1',
component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'),
name: 'Menu1-2-1',
meta: { title: 'Menu 1-2-1' }
},
{
path: 'menu1-2-2',
component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'),
name: 'Menu1-2-2',
meta: { title: 'Menu 1-2-2' }
}
]
},
{
path: 'menu1-3',
component: () => import('@/views/nested/menu1/menu1-3'),
name: 'Menu1-3',
meta: { title: 'Menu 1-3' }
}
]
}
]
}
`Vue.mixin({
beforeR outeLeave:function (to, from, next){
if (from.meta.noCache) {
if (this.$vnode && this.$vnode.data.keepAlive) {
if (this.$vnode.parent && this.$vnode.parent.componentInstance && this.$vnode.parent.componentInstance.cache) {
if (this.$vnode.componentOptions) {
var key = this.$vnode.key == null
? this.$vnode.componentOptions.Ctor.cid + (this.$vnode.componentOptions.tag ? `::${this.$vnode.componentOptions.tag}` : '')
: this.$vnode.key;
var cache = this.$vnode.parent.componentInstance.cache;
var keys = this.$vnode.parent.componentInstance.keys;
if (cache[key]) {
if (keys.length) {
var index = keys.indexOf(key);
if (index > -1) {
keys.splice(index, 1);
}
}
delete cache[key];
}
}
}
this.$destroy();
}
}
next();
},
});`
์์ด๋์ด๋ ์ด๋ฐ ์ข ๋ฅ์ ์์ด๋์ด์ ๋๋ค.์์ด๋์ด์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.์บ์๋ฅผ ํธ์ถํ๊ณ ์ ๊ฑฐํ๋ ์๊ธฐ๋ ๋น์ฆ๋์ค์ ํน์ ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๋น์ฆ๋์ค ์ธก๋ฉด์์ ์ด๋ฌํ ์ข
๋ฅ์ ์๋๋ฆฌ์ค๋ ๋งค์ฐ ์๋๋ฆฌ์ค์ฌ์ผ ํฉ๋๋ค.
1. ์ฌ๋ฌ ํ์ด์ง๋ฅผ ํ์ํ๊ณ ์บ์ํด์ผ ํฉ๋๋ค.
2. ์ข
๋ฃํ๋ ค๋ฉด ํด๋ฆญํ์ธ์. ๋ชจ๋ ์บ์๋ฅผ ์ง์์ผ ํฉ๋๋ค.
3. ๋ก๊ทธ์ธ ํ ๋ค๋ฅธ ์ค๋ฅ ๋ฆฌ๋๋ ์
ํ๋กฌํํธ๊ฐ ์์ต๋๋ค. ์ด ํ์ด์ง๋ ์บ์๋์ง ์์ต๋๋ค.
4. ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๊ณ ์ ํ์ด์ง๊ฐ ๊ณ์ ์บ์๋ฉ๋๋ค.
์ด์ 2์ ๋๋ฌํ์ ๋ ๋ชจ๋ ์บ์๋ฅผ ์ง์ฐ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. vuex์ keep-alive์ ์ต๋ ๊ฐ์ ๋ฃ๊ณ 1๋ก ์ค์ ํ๋ ๊ฒ์ ์ฌ์ ํ โโ์ ํจํ์ง ์์ต๋๋ค. vue ๊ฐ๋ฐ์ ๋๊ตฌ์ ๋ฐ๋ผ ์บ์๋ ํ์ด์ง๊ฐ ์ฌ์ ํ ์์ต๋๋ค.
๋์๊ฒ ๋ ์ด์ํ ๊ฒ์ 3์์ ๋ค๋ฅธ ๋น ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ ํํ๋ฉด 1์์ ์บ์๋ ํ์ด์ง์ ๋ง์ดํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๋๊ณ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ๋ณด๋ฉด ์ด ํ์ด์ง๊ฐ ๋ชจ๋ ๋นํ์ฑํ๋๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ด, ์ด๊ฒ์ ๋ค๋ฅธ ํ์ด์ง ๋ก์ง์ผ๋ก ์ด์ด์ง๋๋ค. ๋ฌธ์ ์.
ํ์ฐธ์ ์ฐพ์๋ ๋ ์์ง๋ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ด
๋น์ฆ๋์ค ์ธก๋ฉด์์ ์ด๋ฌํ ์ข ๋ฅ์ ์๋๋ฆฌ์ค๋ ๋งค์ฐ ์๋๋ฆฌ์ค์ฌ์ผ ํฉ๋๋ค.
1. ์ฌ๋ฌ ํ์ด์ง๋ฅผ ํ์ํ๊ณ ์บ์ํด์ผ ํฉ๋๋ค.
2. ์ข ๋ฃํ๋ ค๋ฉด ํด๋ฆญํ์ธ์. ๋ชจ๋ ์บ์๋ฅผ ์ง์์ผ ํฉ๋๋ค.
3. ๋ก๊ทธ์ธ ํ ๋ค๋ฅธ ์ค๋ฅ ๋ฆฌ๋๋ ์ ํ๋กฌํํธ๊ฐ ์์ต๋๋ค. ์ด ํ์ด์ง๋ ์บ์๋์ง ์์ต๋๋ค.
4. ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๊ณ ์ ํ์ด์ง๊ฐ ๊ณ์ ์บ์๋ฉ๋๋ค.์ด์ 2์ ๋๋ฌํ์ ๋ ๋ชจ๋ ์บ์๋ฅผ ์ง์ฐ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. vuex์ keep-alive์ ์ต๋ ๊ฐ์ ๋ฃ๊ณ 1๋ก ์ค์ ํ๋ ๊ฒ์ ์ฌ์ ํ โโ์ ํจํ์ง ์์ต๋๋ค. vue ๊ฐ๋ฐ์ ๋๊ตฌ์ ๋ฐ๋ผ ์บ์๋ ํ์ด์ง๊ฐ ์ฌ์ ํ ์์ต๋๋ค.
๋์๊ฒ ๋ ์ด์ํ ๊ฒ์ 3์์ ๋ค๋ฅธ ๋น ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ ํํ๋ฉด 1์์ ์บ์๋ ํ์ด์ง์ ๋ง์ดํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๋๊ณ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ๋ณด๋ฉด ์ด ํ์ด์ง๊ฐ ๋ชจ๋ ๋นํ์ฑํ๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ด, ์ด๊ฒ์ ๋ค๋ฅธ ํ์ด์ง ๋ก์ง์ผ๋ก ์ด์ด์ง๋๋ค. ๋ฌธ์ ์.
ํ์ฐธ์ ์ฐพ์๋ ๋ ์์ง๋ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ด
๊ทํ์ ์๋๋ฆฌ์ค์์ 2์์ ํ์ด์ง๋ฅผ ์ง์ ์๋ก ๊ณ ์น๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ด ๊ฐ์ฅ ์์ ํ๊ณ ์ง์ ์ ์ธ ์๋ฃจ์ ์ ๋๋ค.
Include๋ ๊ตฌ์ฑ ์์์ ์ด๋ฆ์ ํด๋นํ๋ฏ๋ก ์ฌ๋ฌ ๊ฒฝ๋ก๊ฐ ํ๋์ ๊ตฌ์ฑ ์์์ ํด๋นํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๋์ผํ ๊ตฌ์ฑ ์์์ ๋ค๋ฅธ ์ด๋ฆ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
$destroy ๋ฉ์๋๋ฅผ ๋ณด๋ ์ปดํฌ๋ํธ์ ๋ค์ํ ์ฌ์ฉ์ ๋์์ ํตํด ํ์ด์ง๋ฅผ ๋ ๋ ๋ ์ปดํฌ๋ํธ๋ฅผ ์บ์ํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
(์๋ฅผ ๋ค์ด, ๋ฉ์์ง ๊ตฌ์ฑ ์์, ์ด ๊ตฌ์ฑ ์์๋ ๋ฉ์์ง๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ ์ถ๋ ํ ์ญ์ ๋์ด์ผ ํฉ๋๋ค. ์ ์ถ๋์ง ์์ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ๋ค์์ ๊ณ์ํด์ ์ฌ ์ ์๋๋ก ์บ์๋ฅผ ๋ณด๊ดํด์ผ ํฉ๋๋ค.)
๊ทธ๋ฌ๋ ํ๊ดด ํ ์ด ๊ตฌ์ฑ ์์์ ๋ค์ ์ก์ธ์ค๋ฅผ ๋ฐ๋ณตํ๋ฉด ์ด์ํ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ๊ณ ๊ตฌ์ฑ ์์๋ฅผ ๋ ์ด์ ์บ์ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํฉ๋๋ค.