vue.$nextTick 解決了哪些問題


  $nextTick 是在下次 DOM 更新循環結束之后執行延遲回調,在修改數據之后使用 $nextTick,則可以在回調中獲取更新后的 DOM

1.問題 

  (1).elementui dialog 中的元素通過 this.$refs  獲取不到

       (2).在第一次進入路由 created() 中操作DOM元素undefined (業務需求 一般不這么做)

       (3).后台請求 完成 頁面上的數據變化可視化(一般用loading 遮罩 但是返回數據較多 並不能在后台返回成功之后馬上 讓loading設為false)

2,解決方案  

   有這樣一個需求 在 dialog 打開 之后 就要讓 后台返回的數據 (已勾選)的數據 打勾

  

由於 element table 中 沒有默認勾選的樹形 只能用 toggleRowSelection 方法

<template>
	<div>
		<el-dialog :visible.sync="dialogVisible" size="tiny">
			<el-table ref="multipleTable" :data="tableData3" border tooltip-effect="dark" style="width: 100%">
				<el-table-column type="selection" width="55">
				</el-table-column>
				<el-table-column label="日期" width="120">
					<template scope="scope">{{ scope.row.date }}</template>
				</el-table-column>
				<el-table-column prop="name" label="姓名" width="120">
				</el-table-column>
				<el-table-column prop="address" label="地址" show-overflow-tooltip>
				</el-table-column>
			</el-table>

		</el-dialog>

		<div style="margin-top: 20px">
			<el-button @click="openDialog">打開彈框</el-button>
		</div>

	</div>

</template>

<script>
	export default {
		data() {
			return {

				dialogVisible: false,
				tableData3: [{
					date: '2016-05-03',
					name: '王小虎',
					address: '上海市普陀區金沙江路 1518 弄'
				}, {
					date: '2016-05-02',
					name: '王小虎',
					address: '上海市普陀區金沙江路 1518 弄'
				}, {
					date: '2016-05-04',
					name: '王小虎',
					address: '上海市普陀區金沙江路 1518 弄'
				}, {
					date: '2016-05-01',
					name: '王小虎',
					address: '上海市普陀區金沙江路 1518 弄'
				}, {
					date: '2016-05-08',
					name: '王小虎',
					address: '上海市普陀區金沙江路 1518 弄'
				}, {
					date: '2016-05-06',
					name: '王小虎',
					address: '上海市普陀區金沙江路 1518 弄'
				}, {
					date: '2016-05-07',
					name: '王小虎',
					address: '上海市普陀區金沙江路 1518 弄'
				}],
				multipleSelection: []
			}
		},

		methods: {
			openDialog() {
				this.dialogVisible = true;
			    this.toggleSelection([this.tableData3[2],this.tableData3[3]])

			},
			toggleSelection(rows) {
				this.$refs.multipleTable.clearSelection();
				if(rows) {
					rows.forEach(row => {
						this.$refs.multipleTable.toggleRowSelection(row);
					});
				}
			},
		}
	}
</script>

  我們在第一次打開彈框的時候,是沒有 勾選上的 ,控制台

  $nextTick 是在下次 DOM 更新循環結束之后執行延遲回調,在修改數據之后使用 $nextTick,則可以在回調中獲取更新后的 DOM  

      彈出框打開之后 頁面需要加載DOM 然后 在nextTick中調用勾選的方法  頁面渲染完成之后 調用 

其他問題 類似 就不過多累述;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM