VUE学习笔记

模板语法

js表达式

<template>
  <h3>模板语法</h3>
  <p>{{ msg }}</p>
  <p>{{ num+1 }}</p><!--双花括号里面只能是单行且有返回值的运算-->
</template>

<script>
export default{
  data(){
    return{
      msg:"vue语法",
      num:10
    }
  }
}
</script>

插入原始Html

<template>
  <h3>模板语法</h3>
  <p>{{ msg }}</p>
  <p>{{ num+1 }}</p>
  <p v-html="rawHtml"></p><!--插入原始html需要设置为v-html-->
</template>

<script>
export default{
  data(){
    return{
      msg:"vue语法",
      num:10,
      rawHtml:"<a href='https://www.baidu.com'>测试链接</a>"
    }
  }
}
</script>

属性绑定

<template>
  <div v-bind:id="dynamicId" :class="dynamicClass"></div><!--前面加v-bind:或者直接加:-->
</template>

<script>
export default{
  data(){
    return{
      dynamicClass:"appclass",
      dynamicId:"appid"
    }
  }
}
</script>
<style>
  .appclass{
    color:red;
    font-size:30px;
  }
</style>

或者直接绑定v-bind为对象

<template>
  <div v-bind="objectOfAttrs">测试</div>
</template>

<script>
export default{
  data(){
    return{
      dynamicClass:"appclass",
      dynamicId:"appid",
      objectOfAttrs:{
        id:"appid",
        class:"appclass"
      }
    }
  }
}
</script>
<style>
  .appclass{
    color:red;
    font-size:30px;
  }
</style>

条件渲染

<template>
    <h3>条件渲染</h3>
    <div v-if="flag">能否看见</div>
    <div v-else>上面的看不见就可以看见下面</div>
    <div v-if="type=='A'">A</div>
    <div v-else-if="type=='B'">B</div>
    <div v-else-if="type=='C'">C</div>
    <div v-else>not a or b or c</div>
    <div v-show="flag">能否看见2</div>
</template>

<script>
export default{
    data(){
        return {
            flag:true,
            type:"A"
        }
    }
}
</script>

v-if会真正的创建和销毁,而v-show无论何时都会创建,只是display属性发生了改变

频繁切换使用v-show,否则使用v-if

列表渲染

<template>
    <h3>列表渲染</h3>
    <p v-for="item in names">{{ item }}</p>
</template>

<script>
export default{
    data(){
        return{
            names:["陈紫阳","李英杰","小菜坤","李一鸣"]
        }
    }
}
</script>
<template>
    <h3>列表渲染</h3>
    <div v-for="(item,index) in result">
        <p>{{ index }}</p>
<p>{{ item.id }}</p>
<p>{{ item.username }}</p>
    </div>
</template>

<script>
export default{
    data(){
        return{
            result:[
                {
                    "id":100001,
                    "username":"一号用户"
                },
                {
                    "id":100002,
                    "username":"二号用户"
                },
                {
                    "id":100003,
                    "username":"三号用户"
                }
            ]
        }
    }
}
</script>

遍历对象

<template>
    <h3>列表渲染</h3>
    <div>
        <p v-for="item of userInfo">{{ item }}</p>
    </div>
</template>

<script>
export default{
    data(){
        return{
            userInfo:{
                name:"tansor",
                age:21,
                sex:"man"
            }
        }
    }
}
</script>
<template>
    <h3>列表渲染</h3>
    <div>
        <p v-for="(value,key,index) of userInfo">{{ index }}-{{ key }}-{{ value }}</p>
    </div>
</template>

<script>
export default{
    data(){
        return{
            userInfo:{
                name:"tansor",
                age:21,
                sex:"man"
            }
        }
    }
}
</script>

通过key管理状态(一般使用table的primary key作为key)

<template>
    <h3>列表渲染</h3>
    <p v-for="(item,index) in names" :key="index">{{ item }}</p>
</template>

<script>
export default{
    data(){
        return{
            names:["陈紫阳","李英杰","小菜坤","李一鸣"]
        }
    }
}
</script>

事件处理

<template>
    <h3>事件处理</h3>
    <button @click="addCount">点击按钮</button>
    <p>{{ count }}</p>
</template>
<script>
export default{
    data(){
        return {
            count:0,
        }
    },
    methods:{
        addCount(){
            this.count++//使用data中的变量使用this指向
        }
    }
}
</script>

事件传参

<template>
    <h3>事件处理</h3>
    <button @click="addCount">点击按钮</button>
    <p>{{ count }}</p>
    <button @click="testClick(123,$event)">传参</button><!--&event只能写在最后一个参数-->
</template>
<script>
export default{
    data(){
        return {
            count:0,
        }
    },
    methods:{
        addCount(e){
            e.target.innerHTML="点击按钮"+this.count;
            this.count++//使用data中的变量使用this指向
        },
        testClick(num,e){
            console.log(num)
            console.log(e)
        }
    }
}
</script>

事件修饰符

事件处理 | Vue.js (vuejs.org)

阻止默认事件

<template>
    <h3>事件修饰符</h3>
    <a @click.prevent="clickHandle" href="https://www.baidu.com">阻止测试链接</a>
</template>

<script>
export default{
    data(){
        return{

        }
    },
    methods:{
        clickHandle(e){
            console.log("click");
        }
    }
}
</script>

事件冒泡

触发子元素的时间同时也触发了父元素

阻止事件冒泡

<template>
    <h3>事件修饰符</h3>
    <div @click="clickHandle">
        <a @click.prevent="clickHandle" href="https://www.baidu.com">事件冒泡</a>
    </div>
</template>

<script>
export default{
    data(){
        return{

        }
    },
    methods:{
        clickHandle(e){
            console.log("click");
        }
    }
}
</script>

数组变化侦测

<template>
    <h3>数组变化侦听</h3>
    <button @click="addListHandle">点击测试</button>
    <ul>
        <li v-for="(item,index) of names" :key="index">{{ item }}</li>
    </ul>
</template>

<script>
export default{
    data(){
        return {
            names:["陈紫阳","李英杰","小菜坤","李一鸣"]
        }
    },
    methods:{
        addListHandle(){
            this.names.push('小一');//会引起UI变化
            this.names.concat(['小一','小二']);//不会引起UI变化
            this.names=this.names.concat(['小一','小二']);//会引起UI变化
        }
    }
}
</script>

会引起UI变化的数组操作

  • push
  • pop
  • shift
  • unshift
  • splice
  • sort
  • reverse

不会引起UI变坏的

  • filter
  • concat
  • slice

计算属性

<template>
    <p>{{ showContent }}</p>
    <p>{{ showContent2() }}</p>
</template>

<script>
export default{
    data(){
        return {
            info:{
                id:100001,
                content:"tansor"
            }
        }
    },
    computed:{//计算属性,this.info.content不变的话,多次调用不会重复计算
        showContent(){
            return this.info.content.length>0?'Yes':'No'
        }
    },
    methods:{//此方法,this.info.content不变的话,也会重复计算
        showContent2(){
            return this.info.content.length>0?'Yes':'No'
        }
    }
}
</script>
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇