当页面重新加载时正在监视的属性未更改时,Vue watch 不会运行

Posted

技术标签:

【中文标题】当页面重新加载时正在监视的属性未更改时,Vue watch 不会运行【英文标题】:Vue watch does not run when the property being watched is not changed on page reload 【发布时间】:2021-02-07 05:04:21 【问题描述】:
<template>
<!-- The navbar has a property for gender, the color of the navbar will change depending on the 
 gender -->
<!-- pass the props gender through a form submission and event -->

<div class="nav-main" :class="female: isGirl, male: isBoy">
  <nav class="menu">
      <a href="#">Home</a>
      <a href="#">Find</a>
      <a href="#">Match</a>
  </nav>
  <nav class="settings">
      <a href="#" class="setting-link">Settings</a>
  </nav>
</div>
</template>

<script>

export default 
 name: 'Navbar',
 props: ['gender'],
 data()
    return
        isBoy: false,
        isGirl: false,
    
 ,
 watch: 
    gender: function()
        if(this.gender === 'male')
            this.isGirl = false
            this.isBoy = true
            return 0
        else
            this.isBoy = false
            this.isGirl = true
            return 0
        
    

 
 

 </script>

 <style scoped>
 .nav-main
    padding: 20px 0;   
    display: grid;  
    
  
 nav
    display: inline-block;
 
 .menu
    grid-column: 1/4;
    text-align: right;
 
 .settings
    grid-column: 4/6;
    text-align: right;
 
 a
    color: white;
    text-decoration: none;
    padding: 0  50px;
    font-family: 'Nunito', sans-serif;
 
 .female
    background: #ffb6c1;

.male
    background: #4169e1;

</style>

我打算做的是,如果在属性“性别”中传递的值是男性,那么将在导航栏上应用男性类,但如果有其他任何东西,则将应用女性类 这工作得很好,每当我更改属性时,事情都会按计划进行,但是每当我重新加载页面时,监视功能都不会触发并且值保持不变 为什么会发生这种情况,我该如何解决。

比如说,如果我将道具作为男性传递,则应用男性类,如果我将道具更改为女性,则应用女性更改,但现在如果我重新加载页面,则什么也不会发生

【问题讨论】:

【参考方案1】:

在您的情况下推荐的模式是计算属性,将 isBoy isGirl 更改为基于 gender 属性的计算属性:

props: ['gender'],

computed: 
    isBoy() 
         return this.gender==='male'
    ,

    isGirl() 
        return !this.isBoy
    


代码更短,计算出来的属性对 props 的变化有反应。

【讨论】:

哇!有时看着这样的解决方案的人让我觉得我是一个多么好的程序员 我认为是因为您缺少添加immediate:true 属性【参考方案2】:

computed 的使用方式很好。而你的watch 函数不起作用的原因可能是在你的手表代码开始工作之前prop:gender 已经改变了。 所以试试watch的选项immediate: true

【讨论】:

以上是关于当页面重新加载时正在监视的属性未更改时,Vue watch 不会运行的主要内容,如果未能解决你的问题,请参考以下文章

页面重新加载时未命中更改功能

Vue Router - 路由加载后调用函数

vue-pdf 无法加载到所有页面“未定义的属性”

当视频更改而不重新加载页面时,HTML5 视频元素缺少 END 事件

vue监听路由的变化,跳转到同一个页面时,Url改变但视图未重新加载问题

Vue组件更改时将页脚保留在页面底部