• 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>
    
  • 相关阅读:
    HDU 5642 King's Order 动态规划
    HDU 5640 King's Cake GCD
    HDU 5641 King's Phone 模拟
    HDU 5299 Circles Game 博弈论 暴力
    HDU 5294 Tricks Device 网络流 最短路
    HDU 5289 Assignment rmq
    HDU 5288 OO’s Sequence 水题
    星际争霸 虚空之遗 人族5BB 操作流程
    Codeforces Beta Round #3 D. Least Cost Bracket Sequence 优先队列
    Codeforces Beta Round #3 C. Tic-tac-toe 模拟题
  • 原文地址:https://www.cnblogs.com/lzb1234/p/11230070.html
Copyright © 2020-2023  润新知