VUE 模板语法2

4-1-事件形参

<div id="app">
        <button type="button" @click="getText">开始按钮</button>
        <button type="button" @click="getText">结束按钮</button>
        <table>
            <tr>
                <td>5732</td>
                <td>张三</td>
                <td>
                    <button type="button"@click="getText">查询</button>
                    <button type="button"@click="getText">修改</button>
                    <button type="button"@click="getText">删除</button>
                </td>
            </tr>
        </table>
    </div>
    <script>
        const { createApp } = Vue
        createApp({
            methods:{
                getText(event){
                    // alert(event.target.innerHTML)
                    // console.log(event)
                    console.log(event.target.innerText)
                }
            }
        }).mount("#app")
    </script>

4-2-事件修饰符

 <a href="javascript:;">访问XXX地址</a>
    <div id="app">
        <form action="https://www.163.com">
            <button type="submit" @click="go">提交</button>
        </form>
    </div>
    <script>
        const {createApp}=Vue
        createApp({
            methods:{
                go(event){
                    event.preventDefault()//阻止默认事件
                }
        }            
        }).mount("#app")
    </script>

或者

<a href="javascript">访问XXX地址</a>
<div id="app">
    <form action="https://www.163.com">
        <button type="submit" @click.prevent="go">提交</button>
    </form>
</div>
<script>
    const {createApp}=Vue
    createApp({
        methods:{
            go(event){
            }
    }            
    }).mount("#app")
</script>

4-3-阻止冒泡事件

style定义颜色格式:

<style>
        #red{
            width: 200px;
            height: 300px;
            border: 1px solid red;
        }
        #green{
            width: 100px;
            height: 100px;
            border: 1px solid green;
        }
    </style>

 阻止点击后事件的两种方式其一:

<div id="app">
        <div id="red" @click="goRed()">
            <div id="green"@click.stop="goGreen"></div>
        </div>
    </div>
    <script>
        const {createApp}=Vue
        createApp({
            methods:{
                goRed(){
                    alert("Red")
                },
                goGreen(event){
                    alert("Green")
                    // event.stopPropagation()
                }
            }
        }).mount("#app")
    </script>

其二:.stop:停止事件冒泡 event.stopPropagation():

<div id="app">
    <div id="red" @click="goRed()">
        <div id="green"@click="goGreen"></div>
    </div>
</div>
<script>
    const {createApp}=Vue
    createApp({
        methods:{
            goRed(){
                alert("Red")
            },
            goGreen(event){
                alert("Green")
                event.stopPropagation()
            }
        }
    }).mount("#app")
</script>

5-双向数据绑定

1.功能:表单元素与 VM 数据的双向绑定;
2.示例:
<div id="app">
        <h1>双向数据绑定</h1>
        <p>
            用户姓名:<input type="text" v-model="user.username">
        </p>
        <p>
            用户密码:<input type="text" v-model="user.password">
        </p>
        <p>
            性别:<input type="radio" v-model="user.gender" value="man">男
            <input type="radio" v-model="user.gender" value="woman">女
        </p>
        <p>
            爱好:<input type="checkbox" name="hobbys" v-model="user.hobbys" value="sport">运动
            <input type="checkbox" name="hobbys" v-model="user.hobbys" value="read">读书
        </p>
        <p>
            学历:
            <select v-model="user.education">
                <option value="专科">专科</option>
                <option value="本科">本科</option>
                <option value="研究生">研究生</option>
            </select>
        </p>
        <p>
            用户描述:<textarea v-model="user.describ"></textarea>
        </p>
        <p>
            <button type="button"@click="show">显示绑定数据</button>
        </p>
    </div>
<script>
        const { createApp } = Vue //获取Vue全局对象用于挂载到id值为app元素上
        createApp({
            data(){
                return{
                    user:{
                        gender:'man',
                        hobbys:['sport','read'],
                        education:'专科'
                    }
                }
            },
            methods:{
                show(){
                    alert(JSON.stringify(this.user))
                    this.user.username='admin'
                    this.user.password='admin123'
                    this.user.gender='woman'                 
                }
            }
        }).mount("#app")
    </script>

6-绑定元素的文本与HTML

1.绑定文本:v-text;

2.绑定 HTML:v-html;

3.示例:

<div id="app">
        <h1>绑定元素的文本与HTML的演示</h1>
        <p v-text="link1"></p>
        <p v-html="link2"></p>
    </div>
    <script>
        const { createApp } = Vue //获取Vue全局对象用于挂载到id值为app元素上
        createApp({
            data(){
                return{
                    link1:'<a href="https://www.163.com">网易</a>',
                    link2:'<a href="https://www.163.com">网易</a>'
                }
            }
        }).mount("#app")
    </script>

7-绑定Class与Style

1.理解:在应用界面中,某个(些)元素的样式是变化的

class/style 绑定就是专门用来实现动态样式效果的技术。

2.class 绑定:语法:

:class='类选择器名称'

表达式是字符串:'类选择器名称'

表达式是对象:{'类选择器名称 1':布尔值1,'类选择器名称 2':布尔值 2}

表达式是数组:['类选择器名称 1','类选择器名称 2']

3.Style 绑定:语法:

:style='样式规则的值'

表达式是字符串:'样式规则的值'

表达式是对象:{样式规则名称 1:样式规则的值 1,样式规则名称 2:样式规则的值 2}

表达式是数组:[样式规则 1,样式规则 2]

4.示例:

<style>
        .btn1{
            width: 100px;
            height: 30px;
            font-size: 16px;
            color: #999;
        }
        .btn2{
            background-color: #0aed30;
            border-left:solid 1px #ccc;
            border-top: solid 1px #ccc;
            border-right:solid 2px #666;
            border-bottom: solid 2px #666;
        }
    </style>

body部分代码:

<div id="app">
        <button type="button" :class="className1">绑定样式</button>
        <button type="button" :class="{btn1:btn1_choose,btn2:btn2_choose}">绑定对象样式</button>
        <button type="button" :class="[className1,className2]">绑定数组样式</button>
        <button type="button" :class="[btn1_choose?'btn1':'',btn2_choose?'btn2':'']">绑定数组样式中含逻辑运算</button>
        <hr>
        style绑定样式<br>
        <button type="button" :style="style1">按钮1</button>
    </div>
    <script>
        const {createApp} = Vue
        createApp({
            data(){
                return{
                    className1:"btn1",
                    className2:"btn2",
                    btn1_choose:true,
                    btn2_choose:true,
                    style1:{width:'100px',height:'30px',fontSize:'16px',color:'green'}
                }
            }
        }).mount("#app")
    </script>

8-条件渲染

v-if,v-else,v-show用法:

<body>
    <div id="app">
        <p>
            <a href="#" v-if="user.username=='admin'">编辑</a>
            <a href="#" v-else>详情</a>
        </p>
        <p>
            <a href="#" v-if="user.username=='admin'">编辑</a>
            <a href="#" v-if="user.username!='admin'">详情</a>
        </p>
        <p>
            <a href="#" v-show="user.username=='admin'">编辑</a>
            <a href="#" v-show="user.username!='admin'">详情</a>
        </p>
        <p>
            <button type="button" @click="change">切换成Guest</button>{{user.username}}
        </p>
    </div>
</body>
<script>
        const {createApp} = Vue
        createApp({
            data(){
                return{
                    user:{
                        username:'admin'
                    }
                }
            },
            methods:{
                change(){
                    if(this.user.username==='admin'){
                        this.user.username='guest'
                        event.target.innerText='切换成Admin'
                    }else{
                        this.user.username='admin'
                        event.target.innerText='切换成Guest'
                    }
                }
            }
        }).mount("#app")
    </script>

9-列表渲染

1.功能:实现循环遍历指定的数组。

2.用法:v-for="(item,index) in 数组"

3.示例:

<div id="app">
        <ul>
            <li v-for="(u,index) in user">
                {{index}}-{{u.id}}-{{u.name}}-{{u.age}}
            </li>
        </ul>
    </div>
    <script>
        const {createApp} = Vue
        createApp({
            data(){
                return{
                    user:[
                        {id:1,name:'tom',age:18},
                        {id:2,name:'jack',age:19},
                        {id:3,name:'scout',age:20},
                        {id:4,name:'rookie',age:22},
                    ]
                }
            }
        }).mount("#app")
    </script>

10-计算属性

1.说明:在 computed 属性对象中定义计算属性的方法;

在页面中使用{{方法名}}来显示计算的结果。

2.计算属性高级:通过 getter/setter 实现对属性数据的显示和监视;

计算属性存在缓存, 多次读取只执行一次 getter 计算。

<div id="app">
        姓:<input type="text" v-model="firstName1">
        名:<input type="text" v-model="lastName1">
        姓名:<input type="text" v-model="username1"><br><br>
        姓:<input type="text" v-model="firstName2">
        名:<input type="text" v-model="lastName2">
        姓名:<input type="text" v-model="username2"><br><br>
    </div>
<script>
        const {createApp} = Vue
        createApp({
            data(){
                return{
                    firstName1:'',
                    lastName1:'',
                    firstName2:'',
                    lastName2:'',
                }
            },
            computed:{//计算属性
                username1(){
                    return this.firstName1+''+this.lastName1
                },
                username2:{
                    get(){
                        return this.firstName2+''+this.lastName2
                    },
                    set(val){//张山
                        let strArr=val.split("")//['张','山']
                        this.firstName2=strArr[0]
                        this.lastName2=strArr[1]
                    }
                }
            }
        }).mount("#app")
    </script>

11-监视属性

1.通过 Vue 对象的 $watch() 或 watch 配置来侦听指定的属性;

2.当属性变化时, 回调函数自动调用, 在函数内部进行计算:

3.示例:

<div id="app">
        姓:<input type="text" v-model="firstName">
        名:<input type="text" v-model="lastName">
        姓名:<input type="text" v-model="username"><br><br>
    </div>
    <script>
        const {createApp} = Vue
        createApp({
            data(){
                return{
                    firstName:'',
                    lastName:'',
                    username:''
                }
            },
            watch:{
                username(newVal,oldVal){//参数1:新的数据,参数2:老的数据
                    if(newVal!=''){
                        let strArr = newVal.split("")
                        this.firstName = strArr[0]
                        this.lastName = strArr[1]
                    }else{
                        this.firstName=''
                        this.lastName=''
                    }
                }
            },
            firstName:function() {
                this.username = this.lastName + ' ' + this.firstName
            },
            lastName: function () {
                this.username = this.lastName + ' ' + this.firstName
            }
        }).mount("#app")
    </script>

12.补充

在Vue.js中,`v-`前缀用于指令(Directives),它们是特殊的标记,用于将HTML元素绑定到底层Vue实例的数据上。以下是一些常用的Vue指令:

1. **v-bind**: 动态地绑定一个或多个属性,或一个组件prop到表达式。
   - 简写为 `:` 例如:`:src="imageSrc"`。

2. **v-model**: 在表单控件元素上创建双向数据绑定。
   - 例如:`v-model="inputValue"`。

3. **v-for**: 用于基于源数据多次渲染一个元素或模板块。
   - 例如:`v-for="item in items"`。

4. **v-if**: 条件性地渲染一块内容。
   - 例如:`v-if="isVisible"`。

5. **v-else**: 作为`v-if`的补充,表示else条件。
   - 例如:`v-else`。

6. **v-else-if**: 作为`v-if`的补充,表示else-if条件。
   - 例如:`v-else-if="anotherCondition"`。

7. **v-show**: 根据表达式的真假值切换元素的显示。
   - 例如:`v-show="isVisible"`。

8. **v-on**: 监听 DOM 事件并在触发时执行一些 JavaScript 代码。
   - 简写为 `@` 例如:`@click="doSomething"`。

9. **v-once**: 只渲染元素和组件一次。随后的重新渲染将忽略这些元素和组件。
   - 例如:`v-once`。

10. **v-cloak**: 这是一个特殊指令,用于在Vue.js应用完全渲染之前保持原始内容。
    - 例如:`v-cloak`。

11. **v-text**: 更新元素的文本内容。
    - 例如:`v-text="message"`。

12. **v-html**: 更新元素的HTML内容。
    - 例如:`v-html="htmlContent"`。

以上指令都有特定的用法和场景,可以根据实际的业务需求进行选择和使用。在Vue 3中,大部分指令和Vue 2中保持一致,但有的指令可能已经被废弃或有了新的替代方式。

13.结语

初涉博客,拙笔记录Vue学习之点滴。

步履或深或浅,心境或喜或疲。

愿持之以恒,不断前行。

望诸君不吝赐教,共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值