1. 程式人生 > >vue-router新視窗開啟頁面

vue-router新視窗開啟頁面

vue、vue-Router是用來做單頁面應用的,有的時候需要開啟新頁面使用者體驗才好,比如(點選圖片進入放大模式):
在這裡插入圖片描述
這時候開啟新頁面瀏覽這個訂單詳情很明顯比較合適(槓精走開)。
總結了一下,Vue專案使用Vue-router開啟新頁面的時候一共有如下幾種方法,分別適用不同的場景:

1.在template中,直接給它加上target='_blank'屬性即可,反正最終它也會被解釋為一個a標籤

<router-link to='./home' target='_blank></router-link>

2.在render函式中:

2.2也許你會好奇為啥2.2在2.1前面,因為我現在知道正確簡潔的方法了(配置attrs屬性即可)。

//生成一個div包裹起來的router-link標籤,Vue的render方法
render: (h, params) => {
	return h('div', [
		h('router-link', {
			props: {
				to: './orderdetail',
			},
			attrs: {
				target: '_blank',
			},
		}, '訂單詳情')
	])
}

2.1當你用ivew的table元件,要用vue的render方法生成表格內容的時候,你會發現在props裡面寫target是沒用的,無論你生成a標籤或者是生成router-link

標籤(這是我以前的無知想法,但我不刪,你們可以不用繼續看,實際上給他們配置attrs的target屬性即可),都只能在當前頁面開啟,後來我靈機一動,我生成的是按鈕,但是給他綁定了點選事件,看下面程式碼。

//vue的data選項
data(){
	return {
		//萬惡的iview表格資料來源
		columns: [{
			title: '操作',
			key: 'action',
			render: (h, params) => {
				return h('div', [
					/*這裡生成'a'或者'router-link',在props裡面加上target沒有作用,
					所以我選擇生成iview自帶按鈕元件,在其click時間裡面做文章*/
h('Button', { props: { type: 'text', size: 'small' }, on: {//這裡繫結點選事件模擬超連結的行為 click: () => { const link = "./orderdetail/" + params.row.orderId;//目標地址 window.open(link, '_blank');//新視窗開啟 } } }, '訂單詳情') ]) } }] } }

3.掌握核心思想,想要在新視窗開啟頁面,點選的是什麼標籤並不重要,重要的是給其繫結好事件,利用window.open()方法,傳入新頁面的地址以及特徵引數_blank即可完成騷操作。
示例:window.open('http://iscoser.com','_blank')

也許隨著Vue和Vue-Router的發展,以後會有更好的方法,2018年9月21日,中秋假期即將到來的最後一個工作日,於我而言,能解決問題讓我準點下班回家的方法就是好方法。是世界上最美好的程式碼實現!
在這裡插入圖片描述