zoukankan      html  css  js  c++  java
  • Vue学习笔记(三)

    【书接上文】Vue学习笔记(一)
    【书接上文】Vue学习笔记(二)

    Vue的监听器

    监听器 watch 会监听data中数据的变化 ,当data中的数据变化时,执行对应的逻辑。

    监听的数据名在这里作为函数名,函数拥有两个参数,一个newVal(新值),一个oldVal(旧值)。

    异步操作和无事件操作(比如输入框输入时搜索)时较多使用监听,能使用计算属性的时候尽量使用计算属性。

    简单类型的监听

    <div id="app">
          姓:<input type="text" v-model="firstN">
          名:<input type="text" v-model="lastN">
          <h1>全名:{{ fullName }}</h1>
    </div>
     <script>
         var vm = new Vue({
             el:"#app",
             data:{
                 firstN:"",
                 lastN:"",
                 fullName:""
             },
             watch: {
                 firstN(newVal,oldVal) {
                     console.log(newVal,oldVal);
                     this.fullName = newVal + this.lastN;
                 },
                   //异步操作实例
                 lastN(newVal,oldVal) {
                     setTimeout(()=>{
                        this.fullName = this.firstN + newVal;
                     },1000)   
                 }
             }
         })
    </script>
    

    深度监听

    监听复杂数据类型时,不能使用普通的数据类型的监听方式,需要使用深度监听。

    <div id="root">
          <input type="text" v-model="user.name">
    </div>
    
    <script>
         var vm = new Vue({
            el:"#root",
            data:{
               user:{name:"xxx",age:19}
            },
            watch: {
               user:{
                  handler(newVal){
                     console.log(newVal);
                  },
                  //当前值立刻监听
                  immediate:true,
                  //开启深度监听
                  deep:true
               }
            },
         })
    </script>
    

    $set和set

    作用:向data中的list等添加属性(如:list:{name:zzz,age:18},向list中添加sex属性)

    $set是在newVue里写的,set是全局的。

    vue-resource

    vue-resourse它依赖于vue 必须在引入vue之后引入

    <script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js"></script>
    
    <div id="root"></div>
    <script>
        new Vue({
            el:"#root",
            data:{},
            mounted() {
                this.$http.get("http://www.liulongbin.top:3005/api/getprodlist").then(function (res) {  
                    console.log(res.body.message);//返回是数组
                })
            },
        })
    </script>
    

    Vue的自定义指令

    创建格式:Vue.directive(指令名称,指令相关的配置函数)
    focus:指令名称 名称可以自己定义 见名知意 使用时加前缀v-

    放个例子感受一下:

    <div id="root">
       <input type="text" v-foucs>
       <!-- 这里是个字符串 -->
       <p v-color="'green'">xxxxxxxx</p>
       <!-- 这里是data里面的值 -->
       <p v-color="red">xxxxxxxx</p>
    </div>
    <script>
        //这里就是自定义指令
        Vue.directive("foucs", {
            bind: function (el) {
            console.log("bind");
            console.log(el);
            //dom操作不可用
                el.focus();
            },
            //inserted:被绑定元素插入父节点时调用    
            inserted: function (el) {
                console.log("inserted");
    
                //此处el表示原生dom对象 可进行原生js操作
                // console.log(el);
                // el.focus();
            },
            update: function (el) {
                console.log("update");
            },
        })
      
        Vue.directive("color",{
            inserted(el,binding){
                console.log(binding);
                el.style.color = binding.value;
            }
        })
       
        new Vue({
            el:"#root",
            data:{
                red:"red"
            }
        })
    </script>
    

    $nextTick

    当页面上某些数据更新时,执行某些代码

    <div id="root">
        <p v-text="str" id="thep"></p>
            
        <button @click="btnClick">更新数据</button>
    </div>
    
    <script>
        new Vue({
            el: "#root",
            data: {
                str: "孙俪"
            },
            methods: {
                btnClick() {
                    //data中的数据更新 不会马上更新页面 更新页面是异步的
                    //需求:DOM更新之后 想做某些事情
                    //当页面上的数据更新时,执行某些代码
                    var op = document.getElementById("thep");
                    console.log(op.innerHTML);//孙俪
    
                    //当页面上数据更新时 执行某些代码
                    this.$nextTick(function () {  
                        console.log(op.innerHTML);
                    })
                }
            },
        })
    </script>
    
  • 相关阅读:
    FileUpload的使用
    关于hibernate4的配置我要好好反省一下
    比较SQL Server 2000 数据库中两个库的差异
    用google生活
    用OWC11图形分析本页面及其他页面Table中的数据
    请教ASP.NET培训应该培训的内容和以及顺序
    最近一个快要结束的项目的BUG分析
    我也发软件开发团队的思考(侧重点是人员)
    一个SQL语句的问题,我百思不得其解,请教各位
    分享C#高端视频教程
  • 原文地址:https://www.cnblogs.com/lzb1234/p/11230070.html
Copyright © 2011-2022 走看看