专业编程基础技术教程

网站首页 > 基础教程 正文

Vue入门教程(四)之模板语法(属性)

ccvgpt 2024-11-09 11:29:30 基础教程 8 ℃


1、属性绑定

v-bind的使用目的:对标签内属性赋值时可以使用data中的变量(会动态改变或者说动态处理属性值)。

Vue入门教程(四)之模板语法(属性)

v-bind指令用法:

<a v-bind:href="url"> 跳转 </a>

v-bind缩写形式:

<a :href="url"> 跳转 </a>
<!DOCTYPE html>
<html lang="en">
<body>
    <div id="app">
        <a v-bind:href="url">百度</a>
    </div>
    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                url:'http://www.baidu.com'
            }
        });
    </script>
</body>
</html>

v-model的底层实现原理

v-model指令的本质:其实相当于是v-bind,v-on的结合

用v-bind去绑定属性值,将data中初始化的值显示在输入框中;再通过input事件处理值的变化,使输入框中新的值覆盖掉原来的值。所以,

v-bind的作用使通过数据域(model)的变化导致输入域(view)层跟着变化;v-on的作用是输入域(view)层的变化导致数据域(model)层跟着发生变化;这样就实现了双向数据绑定。

<!DOCTYPE html>
<html lang="en">
<body>
    <div id="app">
        <input  type="text" v-bind:value="msg" v-on:input='handle'>
        <input  type="text" v-bind:value="msg" v-on:input='msg=$event.target.value'>
        <input  type="text" v-model:value="msg">
        <div>{{msg}}</div>
    </div>
    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                msg:'hello'
            },
            methods:{
                handle:function(event){
                    this.msg = event.target.value;
                }
            }
        });
    </script>
</body>
</html>


2、样式绑定

2.1 class样式处理

对象语法:

<div v-bind:class="{warn:isWarn, error:isError,.....}"></div>

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <style type="text/css">
        .warn {
            border: 1px solid red;
            width:100px;
            height: 50px;
        }
    </style>
</head>
<body>
    <div id="app">
        <div v-bind:class="{warn:isWarn}">警告提示</div>
        <button v-on:click="handle">切换</button>
    </div>
    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                isWarn:true
            },
            methods:{
                handle:function(){
                    this.isWarn = !this.isWarn;
                }
            }
        });
    </script>
</body>
</html>


数组语法:

<div v-bind:class="[warnClass, errorClass]"></div>

完整样例:

<!DOCTYPE html>
<html lang="en">
<head>
    <style type="text/css">
        .warn {
            border: 1px solid red;
            width:100px;
            height: 50px;
        }
        .error {
            background-color: yellow;

        }
    </style>
</head>
<body>
    <div id="app">
        <div v-bind:class="[warnClass, errorClass]">警告提示</div>
        <button v-on:click="handle">清空样式</button>
    </div>
    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                warnClass:'warn',
                errorClass:'error'
            },
            methods:{
                handle:function(){
                    this.warnClass = '';
                    this.errorClass = '';
                }
            }
        });
    </script>
</body>
</html>


class绑定事件的相关细节

对象语法和数组语法结合使用

比如,在以上数组语法的例子的基础上加一个对象语法

<!DOCTYPE html>
<html lang="en">
<head>
    <style type="text/css">
        .warn {
            border: 1px solid red;
            width:100px;
            height: 50px;
        }
        .error {
            background-color: yellow;

        }
        .other {
            color:blue;
        }
    </style>
</head>
<body>
    <div id="app">
        <div v-bind:class="[warnClass, errorClass,{other:active}]">警告提示</div>
        <button v-on:click="handle">清空样式</button>
    </div>
    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                warnClass:'warn',
                errorClass:'error',
                active:true
            },
            methods:{
                handle:function(){
                    this.warnClass = '';
                    this.errorClass = '';
                    this.active = false;
                }
            }
        });
    </script>
</body>
</html>


class绑定的值可以简化操作(数组和对象形式的),使代码的可读性好

<!DOCTYPE html>
<html lang="en">
<head>
    <style type="text/css">
        .warn {
            border: 1px solid red;
            width:100px;
            height: 50px;
        }
        .error {
            background-color: yellow;

        }
        .other {
            color:blue;
        }
    </style>
</head>
<body>
    <div id="app">
        <div v-bind:class="arrClass">数组简化</div>
        <div v-bind:class="objClass">对象简化</div>
    </div>
    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                arrClass:['warn','error'],
                objClass:{
                    other:true
                }
            }
        });
    </script>
</body>
</html>


默认的class会被保留,比如以下默认的base样式

<!DOCTYPE html>
<html lang="en">
<head>
    <style type="text/css">
        .warn {
            border: 1px solid red;
            width:100px;
            height: 50px;
        }
        .error {
            background-color: yellow;

        }
        .other {
            color:blue;
        }
        .base {
            font-size: 25px;
        }
    </style>
</head>
<body>
    <div id="app">
        <div class="base" v-bind:class="arrClass">数组简化</div>
    </div>
    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                arrClass:['warn','error'],
            }
        });
    </script>
</body>
</html>


2.2 style样式处理(样式绑定之内联样式style)

对象语法:

<div  v-bind:style='{border:borderStyle}'>对象语法</div>

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
    <div id="app">
        <div  v-bind:style='{border:borderStyle,width:widthStyle,height:heightStyle}'>对象语法</div>
    </div>
    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                borderStyle:'1px solid red',
                widthStyle:'100px',
                heightStyle:'100px'
            }
        });
    </script>
</body>
</html>


style对象语法的简写形式:

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
    <div id="app">
        <div  v-bind:style='objStyle'>对象语法简写</div>
    </div>
    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                objStyle:{
                   border:'1px solid red',
                   width:'100px',
                   height:'100px'
                }
            }

        });
    </script>
</body>
</html>


数组语法:

<div  v-bind:style='[objStyle,otherStyle]'>数组语法</div>

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
    <div id="app">
        <div  v-bind:style='[objStyle,otherStyle]'>数组语法</div>
    </div>
    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#app',
            data:{
                objStyle:{
                   border:'1px solid red',
                   width:'100px',
                   height:'100px'
                },
                otherStyle:{
                    border:'1px solid red',
                    backgroundColor:'blue'
                }
            }
        });
    </script>
</body>
</html>


Tags:

最近发表
标签列表