全网最新版本vue3.0版本 指令

Vue指令

vue内置指令是v-开头的特殊属性 联系html模板与javascript数据类型

1.文本渲染指令

v-text

{{msg}}

v-html

实例:

<div id="app">
		<input type="text" v-model="msg">
		<p>{{msg}}</p>
	</div>
	<script>
		// 
		const app = Vue.createApp({
			data() {
				return { msg: "你好vue" }
			}
		})
		var vm = app.mount("#app")

2.属性渲染

v-bind:属性名="值"

:属性名="值"

实例:

<div id = "app">
<p v-bind:title="msg">你好</p>
<p :title="msg">
 </div>
 Vue.createApp({
            data(){
                return{
                    msg:"你好你好",
                    canUse:true,
                }
            }
        }).mount("#app")

3.条件渲染

v-if

v-else-if

v-else

v-show  隐藏 css方式

v-if 隐藏 移除节点

频繁切换用v-show,反之用v-if

实例:

 <div id="app">
        <p v-if="score>=90">优秀</p>
        <p v-else-if="score>=80">良好</p>
        <p v-else-if="score>=70">中等</p>
        <p v-else-if="score>=60">及格</p>
        <p v-else>不及格</p>
    </div>
    <script>
        Vue.createApp({
            data(){
                return{
                    score:70
                }
            }
        }).mount("#app")
    </script>
   <div id="app">
        <p v-if="can">我会显示</p>
        <p v-show="can">我也会显示啊</p>
    </div>
    <script>
        Vue.createApp({
            data(){
                return{
                    can:false
                }
            }
        }).mount("#app")
        // v-show 是通过css隐藏
        // v-if 直接移除节点隐藏
        // 如果频繁切换显示与隐藏V-show
        // 偶尔切换显示隐藏用v-if
    </script>

4.列表渲染指令

v-for=“(item,index) in list” :key="item"

item变量的当前数据

index当前的下标

key是给vue遍历的节点一个唯一的标识符更好的让vue去做排序

过滤等操作,为了性能的优化,要求在一个for指令里面key的值要唯一

    <div id="app">
        <ul>
            <li v-for="(item,index) in list" :key="item">{{item}} {{index+1}}</li>
            <!-- item保持一致 
            key属性为了让Vue内部给遍历的节点 给一个唯一的标识符 以便更好地去
            排序过滤等操作 为了性能优化 key的值要唯一 -->
        </ul>
    </div>
    <script>
        Vue.createApp({
            data(){
                return{
                    list:["Vue","react","angular"]
                    // list跟上面的list保持一致
                }
            }
        }).mount("#app")
    </script>

 v-for范围

 <div id="app">
        <div v-for="value in 10">{{value}}</div>
    </div>
    <script>
        Vue.createApp({
            data(){
                return{
                    
                }
            }
        }).mount("#app")
//v-for的范围

 v-for和v-if如果要一起的话


        用template 
        <template v-for="item in 10">
            <p v-if="item%2===0">{{item}}</p>
        </template>

5.事件响应

v-on:事件名=“事件响应”
v-on:click="num++"
@click="num++"

实例

每次点击按钮都会+1

<div id="app">
        <button v-on:click="num++">{{num}}</button>
        <button @click="num++">{{num}}</button>
    </div>
    <script>
        Vue.createApp({
            data(){
                return{
                    num:1
                }
            }
        }).mount("#app")

事件修饰符

.stop 阻止事件冒泡
.prevent 阻止默认事件
.once 执行一次

按键的修饰符

确定那个按键被按下
.enter 回车
.esc 取消
.delete 删除
.space 空格
.left .right .up .down

系统修饰符

.ctrl
.shift
.alt

鼠标修饰符

.left .right .middle

6.vue的监听(watch)

wath监听

            定义 监听数据的变化 并执行回调函数

            值类型监听

            watch:{

                "num":function(nval,oval){

                ...

                }

            }

           

            引用类型监听

            watch:{

                obj:{

                    handler(navl){....},

                    depp:true

                }

            }

vue监听器的写法

 Vue.createApp({
            wath:{
                num:function(nval,oval){

                }
            },
            data(){
                return{num:1}
            }
        })

计算机监听实例


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>表单绑定</title>
		<script src="./js/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<!-- 什么时候计算:n1,type,n2发生变化时候计算 -->
		 <input type="text" v-model.number="obj.n1" >
		 <select v-model="obj.type"  >
			 <option value="+">+</option>
			 <option value="-">-</option>
			 <option value="*">×</option>
			 <option value="/">÷</option>
		 </select>
		  <input type="text" v-model.number="obj.n2" >
		 <button>=</button>
		 {{obj.n3}}
		</div>
		<script>
		// 当obj数据发生变化时候,监听obj 并执行计算this.n3的值
			Vue.createApp({
				watch:{
					// 默认发obj是对象引用类型,obj内存地址没有变化
					// 对象监听需要用deep深度监听
					// handler处理器只能拿到最新的值
					obj:{
						handler(nval){
							this.obj.n3 = eval(this.obj.n1+ this.obj.type+this.obj.n2)
						},
						deep:true,//深度监听
					}
				},
				data() {
					return {
						obj:{
							n1:1,
							n2:1,
							type:"+",
							n3:2
						}
					}
				}
				 
			}).mount("#app")
		</script>
	</body>
</html>

7.计算computed

计算的写法

   <div id="app">
        <input type="text" placeholder="请输入" v-model="msg">
        <p>{{msg}}</p>
        <p>{{rmsg}}</p>
    </div>
</head>
<body>

    <script>
        Vue.createApp({
            computed:{
              "rmsg":function(){
                  return this.msg.split("").reverse().join('')
              }  
            },
            data(){
                return{
                    msg:'你好我是'
                }
            }
        }).mount("#app")
    </script>

computed的实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/vue.js"></script>
</head>

<body>
    <div id="app">
        <input type="text" placeholder="搜索" v-model="keyword">
        <table border="1">
            <tr>
                <td>姓名</td>
                <td>性别</td>
                <td>年龄</td>
                <td>电话</td>
            </tr>
            <tr v-for="item in fstudents" key="item.phone">
                <td>{{item.name}}</td>
                <td>{{item.sex}}</td>
                <td>{{item.age}}</td>
                <td>{{item.phone}}</td>
            </tr>
        </table>
    </div>
    <script>
        // 搜索 其实就是从现有的数据student 计算出和keyword相关的数据
        // 需要遍历student数据 如果当前行对象的数据包含了keyword当前行保留
        Vue.createApp({
            // 目标从现有的msg计算出rmsg
            computed: {
                "fstudents":function(){
                    return this.students.filter(item=>{
                        var flag = true;
                        // 默认返回true
                        if(this.keyword!==''){
                            // 把当前行转换为字符串
                            var str = JSON.stringify(item);
                            // 如果str包含了keyword设置flag为true否则设置flag值为false
                            str.includes(this.keyword)?flag=true:flag=false;
                        }
                        // 如果flag为true 当前行的数据就保留 否则就过滤掉
                        // str包含了关键字 当前行保留 不包含当前行过滤掉
                        return flag;
                    })
                }
            },
            data() {
                return {
                    keyword:'',//搜索关键字
                    students: [//学生列表
                        { name: '张三', sex: '女', age: 19, phone: '18921212121' },
                        { name: '李四', sex: '男', age: 29, phone: '18921221122' },
                        { name: '王五', sex: '女', age: 39, phone: '18921788723' },
                        { name: '赵六', sex: '男', age: 49, phone: '18921556124' },
                        { name: '曾七', sex: '男', age: 29, phone: '18921221125' },
                        { name: '刘八', sex: '女', age: 39, phone: '18921788726' },
                        { name: '黄九', sex: '男', age: 29, phone: '18921221127' },
                        { name: '王五', sex: '女', age: 39, phone: '18921788728' },
                        { name: '王五', sex: '女', age: 39, phone: '18921788729' },
                        { name: '赵六', sex: '男', age: 49, phone: '18921556110' },
                        { name: '李思思', sex: '男', age: 29, phone: '18921221111' },
                        { name: '张三', sex: '女', age: 19, phone: '18921212112' },
                        { name: '李四', sex: '男', age: 29, phone: '18921221113' },
                        { name: '王五', sex: '女', age: 39, phone: '18921788714' },
                        { name: '赵六', sex: '男', age: 49, phone: '18921556115' },
                        { name: '李四', sex: '男', age: 29, phone: '18921221116' },
                        { name: '王五', sex: '女', age: 39, phone: '18921788717' },
                        { name: '李四', sex: '男', age: 29, phone: '18921221118' },
                        { name: '王五', sex: '女', age: 39, phone: '18921788719' },
                        { name: '王五', sex: '女', age: 39, phone: '18921788720' },
                        { name: '赵六', sex: '男', age: 49, phone: '18921556131' },
                        { name: '李五五', sex: '男', age: 29, phone: '18921221133' }]

                }
            }
        }).mount("#app")
    </script>
</body>

</html>

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值