zoukankan      html  css  js  c++  java
  • vue系列--【生命周期、侦听器watch、计算属性、jsonp解决跨域】

    1.生命周期

    let vm=new Vue({
      // 创建之前:什么都是undefined
      beforeCreate() {
        console.group("创建之前");
        console.log('el:', this.$el);
        console.log('data:', this.$data);
        console.log('name:', this.name);
        console.groupEnd();
      },
      // 创建完成:vue对象创建完成,但是挂载点还没找
      created() {
        console.group("创建完成");
        console.log('el:', this.$el);
        console.log('data:', this.$data);
        console.log('name:', this.name);
        console.groupEnd();
      },
      // 如果有el,就会触发挂载期;如果没有,挂载期就不执行
      // 挂载之前:找到了要挂载的标签(el),但是指令、{{}}还没有解析
      beforeMount() {
        console.group("挂载之前");
        console.log('el:', this.$el);
        console.log('data:', this.$data);
        console.log('name:', this.name);
        console.groupEnd();
      },
      // 挂载完成:指令、{{}}解析完成,DOM节点加载完成
      // 操作DOM、打开计时器、一进到页面做数据交互、给document、window加事件
      mounted() {
        console.group("挂载完成");
        console.log('el:', this.$el);
        console.log('data:', this.$data);
        console.log('name:', this.name);
        console.groupEnd();
    
        /*
                    document.onclick = function () {
    
                    }
                    window.onscroll = () => {
                        if(到底了){
                            ajax
                        }
                    }*/
      },
      //数据变了,页面重新更新之前和更新之后取到的都是新值
      //页面重新更新之前
      beforeUpdate() {
        console.group("更新之前");
        console.log('name:', this.name);
        console.groupEnd();
      },
      //页面重新更新完成
      updated() {
        console.group("更新完成");
        console.log('name:', this.name);
        console.groupEnd();
      },
      // vm.$destroy() 触发,会引起销毁--
      //销毁之前-善后工作 :清除计时器、清除document、window上的事件。
      beforeDestroy () {
        console.group("销毁之前");
        console.groupEnd();
        //window.onscroll=null;
      },
      destroyed () {
        console.group("销毁完成");
        console.groupEnd();
      }
    })
    
    

    template

    <div id="app">
    
    </div>
    <script>
      // 如果Vue没有template选项,那么就解析的是el对应的节点
      // 如果Vue有tempalte选项,那么解析的就是template,把template替换el
      new Vue({
        el:"#app",
        template:"<h3>这是template--{{name}}</h3>",
        data:{
          name:"妲己"
        },
        methods:{}
      })
    </script>
    

    方法

    vm.$mount("#app")//挂载
    vm.$destroy()//销毁
    

    2.侦听器 监听器 watch

    作用:

    监听data|computed数据的改变

    语法:

    new Vue({
    	watch:{
        //只有浅监听才可以简写
        name(newValue, oldValue) {
          console.log("name变了");
          console.log(newValue, oldValue);
        },
        age: {
          handler() {
            console.log("age变了");
          },
          //深度 false 浅监听,true 深度监听 默认值:false
          deep:false
        },
        //如果数据是简单类型(string、number、boolean),浅监听就ok
        // 一旦监听对象是个引用类型,需要使用深度监听(加一个deep:true)。
        json:{
          handler(newValue,oldValue){
            console.log("json变了");
          },
          deep:true
        },
    	}
    })
    

    注意

    开发,不建议使用深度监听,因为深度监听会造成页面卡顿。
    

    3.计算属性

    定义:

    经过计算得到的数据。

    语法:

    new Vue({
      computed:{
        msg(){
          return 10
        },
        ava(){
          let sum=0
          this.student.forEach(item=>{
            sum+=item.score;
          })
          return (sum/this.student.length).toFixed(2)//保留两位小数
        }
      }
    })
    

    4.计算属性和methods的区别?

    两种方式得到的结果是相同的。 
    不同的是
       计算属性是基于变量的值进行缓存的,只要在它关联的变量值发生变化时计算属性就会重新执行。
       而methods 没有缓存,所以每次访问都要重新执行。 
    		
    	计算属性是自动触发,methods是手动触发。
    

    5.计算属性和watch的区别?

    共同点:都是以Vue的依赖追踪机制为基础的,都是希望在依 赖数据发生改变的时候,被依赖的数据根据预先定义好的函 数,发生“自动”的变化。 
    不同点:
    	watch擅长处理的场景:一个数据影响多个数据; 
    	computed擅长处理的场景:一个数据受多个数据影响。
    	虽然 计算属性在大多数情况下更合适,但有时也需要一个自定义 的侦听器,当需要在数据变化时执行异步或开销较大的操作 时,通过侦听器最有用。
    	
    总结: 当在模板内使用了复杂逻辑的表达式时,应当使用计算属性。 虽然方法也能实现同样的效果,但是因为计算属性可以基于它们的依赖进行缓存,所以选择计算属性会比方法更优。 当需要在数据变化时执行异步或开销较大的操作时,可以使用 watch。
    

    6.vue中常见的bug有哪些?

    {{}} 会出现闪屏 ---》v-text
    数组|json变了 不渲染 ---》Vue.set() vm.$set() 
    watch深度监听会卡顿 ----》少用、methods
    if+for  ---------------》computed
    

    7.jsonp解决跨域

    使用步骤

    1.创建一个script  let os=document.createElement("script")
    2.给src赋值访问路径 os.src="url"
    3.插入到页面       document.body.appendChild(os)
    4.回调函数处理数据  
    

    使用jsonp的条件

    1.跨域
    2.有一个参数叫 callback|cb
    
  • 相关阅读:
    phpcms之会员中心主页
    phpcms之文章详情页
    phpcms之文章列表页
    phpcms之友情链接
    phpcms之首页组成(四)
    phpcms之首页组成(二)
    phpcms之首页组成(三)
    phpcms之首页组成调用
    基于JSch的Sftp工具类
    Flex String转Date
  • 原文地址:https://www.cnblogs.com/chenhaiyun/p/14757088.html
Copyright © 2011-2022 走看看