Vue改变数组值,页面视图为何不刷新?

简介: Vue改变数组值,页面视图为何不刷新?

1、iview table 自定义序号

image.png

将其对应的type设为 index 即可

{
title: "序号",
width: 70,
align: "left",
type: "index"
}

2、父子组件传值,父组件调用子组件方法

场景:iview 中 封装一个modal 组件公共引用

父组件:

// 引入组件
import orderModal from './orderModal.vue'
// 使用
<order-modal 
  :showPop="showPop"    // 控制组件的显示关闭
  :orderData="orderData"      // 数据
  :orderH1="orderH1"
  :btnText="btnText"
  @on-close="hidePop">    // 将子组件的方法传递给父组件使用
</order-modal>
// 父组件方法
hidePop(e,type){
if(type !== undefined){
// 方法
    }
this.showPop = e  // 关闭弹窗 e 为子组件传递过来的值
},

子组件

<Modal 
    v-model="currentValue"  // 子组件中接受父组件的 isShowAdd
    @on-cancel="cancel">    // Modal 的关闭事件
    <Form   
ref="orderData"
        :model="orderData">  // 接受传递的数据
    </Form>
</Modal>
// 子组件 props接受传递参数
props: ['showPop','orderData','orderH1','btnText'],

这里原本 ==v-model== 使用的使传递过来的 ==showPop== 作为参数,一开始没有问题,但是如果我想将子组件的关闭方法提到父组件去触发 那么 直接在 父组件 ==this.showPop = false==。那么就会提示报错,因为 Vue使单向数据流不能直接改版传递子组件的值。改成如下:

// 在子组件中用watch来监听 isShowAdd 是否变化,
然后赋值给 currentValue
watch: {
  isShowAdd(value,val) {
this.currentValue = value
  }
}
// 子组件的关闭操作提升到父组件 $emit
cancel(type){
this.$emit('on-close', false, type)
}

3、网上的资料如下图:

总结:

这个问题还折腾了快半个小时,归根到底还是不经常使用的后果,好多代码之前都用过,像封装组件这种还要折腾,简直是不知道说什么好呀,只能以后多使用了。

4、Vue改变数据视图不更新

4.1 异步更新队列

Vue 异步执行 DOM 更新。只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。
如果同一个 watcher 被多次触发,只会被推入到队列中一次。
这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作上非常重要。
然后,在下一个的事件循环“tick”中,
Vue 刷新队列并执行实际 (已去重的) 工作。
Vue 在内部尝试对异步队列使用原生的 Promise.then 和 MessageChannel,如果执行环境不支持,会采用 setTimeout(fn, 0) 代替。

解决方法

this.$nextTick()

4.2 数组改变视图不更新

通过以下数组方法可以让vue监测数组改动

push()
pop()
shift()
unshift()
splice()
sort()
reverse()

4.3 vue不能检测到对象属性的添加或删除

由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的

解决方法

1、Vue.set(object, key, value)
2、Object.assign() 或 _.extend() 方法来添加属性。

但是第二种方法,添加到对象上的新属性不会触发更新。在这种情况下可以创建一个新的对象,让它包含原对象的属性和新的属性:

// 代替 `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })  // 深拷贝
相关文章
|
7天前
|
JavaScript 前端开发 开发者
Vue中的class和style绑定
在 Vue 中,class 和 style 绑定是基于数据驱动视图的强大功能。通过 class 绑定,可以动态更新元素的 class 属性,支持对象和数组语法,适用于普通元素和组件。style 绑定则允许以对象或数组形式动态设置内联样式,Vue 会根据数据变化自动更新 DOM。
|
8天前
|
移动开发 JavaScript API
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。
|
8天前
|
JavaScript 前端开发 数据安全/隐私保护
Vue Router 简介
Vue Router 是 Vue.js 官方的路由管理库,用于构建单页面应用(SPA)。它将不同页面映射到对应组件,支持嵌套路由、路由参数和导航守卫等功能,简化复杂前端应用的开发。主要特性包括路由映射、嵌套路由、路由参数、导航守卫和路由懒加载,提升性能和开发效率。安装命令:`npm install vue-router`。
|
11天前
|
监控 JavaScript 前端开发
ry-vue-flowable-xg:震撼来袭!这款基于 Vue 和 Flowable 的企业级工程项目管理项目,你绝不能错过
基于 Vue 和 Flowable 的企业级工程项目管理平台,免费开源且高度定制化。它覆盖投标管理、进度控制、财务核算等全流程需求,提供流程设计、部署、监控和任务管理等功能,适用于企业办公、生产制造、金融服务等多个场景,助力企业提升效率与竞争力。
66 12
|
JavaScript 数据安全/隐私保护
work02_vue页面打印水印
work02_vue页面打印水印
360 0
work02_vue页面打印水印
|
29天前
|
JavaScript 安全 API
iframe嵌入页面实现免登录思路(以vue为例)
通过上述步骤,可以在Vue.js项目中通过 `iframe`实现不同应用间的免登录功能。利用Token传递和消息传递机制,可以确保安全、高效地在主应用和子应用间共享登录状态。这种方法在实际项目中具有广泛的应用前景,能够显著提升用户体验。
58 8
|
30天前
|
存储 设计模式 JavaScript
Vue 组件化开发:构建高质量应用的核心
本文深入探讨了 Vue.js 组件化开发的核心概念与最佳实践。
77 1
|
2月前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
151 1
|
2月前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
3月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的

热门文章

最新文章