美文网首页
vue 相关知识点

vue 相关知识点

作者: 波仔_4867 | 来源:发表于2021-06-23 11:28 被阅读0次

    侦听器初始化深度监听

     watch: {
        scrollTop: function() {
          console.log(this.scrollTop);
        }
      },
    
    watch: {
        form_log: {    //监听的属性为对象
          handler: function () {
            this.init()
          },
          deep: true,  //深度监听
          immediate: true,    //初始化监听
        },
      },
    

    全局监听事件 也可实现兄弟组件通讯

    1、vm.$on( event, callback )
    
    监听当前实例上的自定义事件。事件可以由vm.$emit触发。回调函数会接收所有传入事件触发函数的额外参数。
    
    2、vm.$emit( event, […args] )
    
    触发当前实例上的事件。附加参数都会传给监听器回调,如果没有参数,形式为vm.$emit(event)
    
    3、vm.$off( [event, callback] )
    
    移除自定义事件监听器。
    
    如果没有提供参数,则移除所有的事件监听器;
    如果只提供了事件,则移除该事件所有的监听器;
    如果同时提供了事件与回调,则只移除这个回调的监听器。
    在main.js 中 window.myevent = new Vue();  定义全局事件
    
    在父组件 window.myevent.$emit("class_report_reload","");  发起事件第一个参数是 事件,第二个参数是值
    
    子组件在mounted 监听window.myevent.$on("class_report_reload",()=> {
          this.init();
        });
    

    如果页面显示的数据为对象时如何判断是否有数据

    v-if="Object.keys(rawdara).length > 0"    
    Object.keys()方法会返回一个由给定对象的自身可枚举属性组成的数组
    
    let person = {name:"张三",age:25,address:"深圳",getName:function(){}}
    Object.keys(person) // ["name", "age", "address","getName"]
    

    父组件传给子组件的对象,如果子组件更改了对象值的话,即使没有传值给父组件也会影响到父组件里的对象数据

    //可使用深拷贝
    let form_log = JSON.parse(JSON.stringify(this.form_log));
    
    

    将数组转换成数组套对象

           let arrList = [];
            for (let i in this.subData.check_fences) {
              var j = {};
              j.fence_id = this.subData.check_fences[i]
              arrList.push(j);
            }
    

    强制刷新组件之$forceupdate、v-if、key属性三种方式的适用

    1.$ forceupdate()仅针对当前组件以及其插槽相关子组件。

    作用:例如当data中的某个内容进行了改变,但是页面没有进行实时的刷新,而我又通过打印能确定数据确实改变了,因此可以使用$ forceupdate()来迫使当前组件刷新。

    2.v-if通过变量控制的形式,可以触发 被控制的组件 beforeCreate、created、beforeMount、mounted、beforeDestroy、destroyed 这6个生命周期,但是由于v-if指令的原因,会导致其控制的内容会发生显示与隐藏操作。虽然可以达到刷新的效果,但是把其当作刷新这个功能,在项目中还是比较少见的。

    3.通过key属性来进行刷新操作,在web中的效果是最理想的,因为页面根本感觉不到组件的销毁与创建过程,但是确实满足了组件的刷新功能。

    操作方式:在data中定义某个变量,然后将该变量放置在组件的key属性中,要实现该组件刷新时,只需改变变量的值即可。
    注意:当key值改变的时候,child子组件实际上经历了新的child的创建过程以及旧的child的销毁过程

    <template>
        <child ref="child1" :key='indexKey'></child>
    </template>
    <script>
    import child from "./child";
    export default {
     components: { child },
     data() {
        return {
          indexKey: 0  // 只需要通过操作如点击事件改变这个值,child子组件就会刷新,而且视觉上不会有变化
        };
      },
     }
    </script>
    

    if语句扩展

     v-if="
                  (info_details.resourceclass == 1 ||
                    info_details.resourceclass == 2) &&
                    info_details.converted == 1
                "
    

    text-align: lefe; 用于块元素

    span 标签设置不可用

    cursor:not-allowed;//是禁用的样式 一个圆圈中间一个斜杠 //其中还有一个属性也是这个样式 cursor:no-drop;
    

    for循环去掉最后一个符号

     for (let i = 0; i < this.ques_model.questionPoints.length - 1; i++) {
                this.html += this.ques_model.questionPoints[i].pointname + "|";
              }
              this.html += this.ques_model.questionPoints[
                this.ques_model.questionPoints.length - 1
              ].pointname;
    

    后台返回的数据自动换行 white-space: pre-wrap;
    {{ row.usersex == 1 ? "男" : row.usersex == 2 ? "女" : "未知" }}
    三木运算符 :class="['group_name', classdisabled ? 'class-disabled' : '']"
    :class="[ 'user-info-title',chatItem.userid == sectionInfo.teacherid
    ? 'theme_color': '']"
    :class="{ 'ivu-layout-sider-active': isCollapsed }" //如果后面的变量成立,类名生效
    html 空格  
    关于v-if 的知识点,在弹窗情况下,每次都会重新渲染数据,解决滚动条在底部的话,再次打开弹窗数据重新渲染(会回到顶部)

    在当前路由保存搜索信息,详情页返回列表时保留搜索信息

     //注意 返回当前路由的方法不能用push或replace 会删除保存的路由信息 用go(-1) 返回上一页
      keepAlive() {
         // 获取当前路由 信息直接存在url里
          let path = this.$route.path;   
          let query = this.$route.query;
          let form_data = JSON.stringify(this.form_data);
          let newQuery = {
            form_data
          };
          query = Object.assign({}, query, newQuery);
          this.$router.replace({
            path,
            query
          });
        },
     
      //初始化获取路由信息
     if (this.$route.query.form_data) {
          this.form_data = JSON.parse(this.$route.query.form_data);
        }
    //要在路由表里添加 (有的huihui)
    // 重写路由 解决 push报错问题
    const routerPush = VueRouter.prototype.push;
    VueRouter.prototype.push = function push(location) {
      return routerPush.call(this, location).catch(error => error);
    };
    const originalReplace = VueRouter.prototype.replace;
    VueRouter.prototype.replace = function replace(location) {
      return originalReplace.call(this, location).catch(err => err);
    };
    

    Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。Object.assign方法的第一个参数是目标对象,后面的参数都是源对象。(如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性)。

     this.box={
            a: 1,
            b: 2
          }
          let data = {
            c: 3,
            a: 4
          };
          let baz = Object.assign(this.box, data);
          console.log(baz);   //a: 4,b: 2,c: 3
    

    给数组添加属性(变为响应式数据)

     //set 方法  第一个参数原数据 、第二个参数属性名、 第三个参数为值
      this.$set(obj, "s_m", parseInt(theTime1));
    

    删除属性(加$会视图更新)

    this.$delete(this.testData,"name")
    

    在URL上存日期或时间戳,取的时候要new Date转成日期对象(日期选择器要求传入的是日期对象格式)

    img图片加载出错处理 https://blog.csdn.net/milli236/article/details/78930720

    设置页面滚动高度

    document.querySelector(".content_inner2").scrollTop = 0;
    document.body.scrollTop = 0;
    

    map详解

    直接调用子组件的方法并传值

    //优点就是可以直接子组件里的init方法并且传值
    //缺点就是子组件一直在运行 不能控制复用(还是用v-if哈哈)
    this.$refs.add_or_update.init(this.form_bank);
    

    vue项目创建https://www.zhuawaba.com/post/17

    vue 播放器https://www.npmjs.com/package/vue-aliplayer-v2

    vue里面本身带有两个回调函数:
    一个是Vue.nextTick(callback),当数据发生变化,更新后执行回调。
    另一个是Vue.$nextTick(callback),当dom发生变化,更新后执行的回调。

    v-for 可以循环数字

    $setMySkin 换肤技术

    if (theme == "blue" || !theme) {
    //当前路径与html文件在同一层
           this.$setMySkin("./theme/default.css");
         } else if (theme == "red") {
           this.$setMySkin("./theme/haverRed.css");
         }
    

    document.title="" 当前网页的标题

    相关文章

      网友评论

          本文标题:vue 相关知识点

          本文链接:https://www.haomeiwen.com/subject/zifzsltx.html