模板语法

代码规范:最好每次缩进俩个空格更符合规范哟~

创建Vue实例传入的options

el
类型:string | HTMLElement
作用:用于挂载要管理的元素节点,值可以是 CSS 选择符,或实际 HTML 元素,或返回 HTML 元素的函数。	
data
类型:Object | Function(组件当中data必须是一个函数)
作用:Vue实例对应的数据对象
methods
类型: {[key:string]:Function}
作用:定义属于Vue的一些方法,可以在其他地方调用,也可在指令中使用

插值操作

Mustache
是双大括号  {{}}

Mustache 语法中,不仅可以直接写变量,也可以写简单的表达式

有个限制就是,每个绑定都只能包含单个表达式,所以下面的例子都不会生效。

<!-- 这是语句,不是表达式 -->
{{ var a = 1 }}

<!-- 流控制也不会生效,请使用三元表达式 -->
{{ if (ok) { return message } }}



===============================================================
例如:

<body>
    <div class="container">
        <h2>{{firstName+" "+lastName}}</h2>
        <h2>{{firstName}} {{lastName}}</h2>
        <h2>{{count*2}}</h2>
    </div>
    <script src="./vue.js"></script>
    <script>
        const app=new Vue({
            el:".container",
            data:{
                firstName:"Stephen",
                lastName:"Curry",
                count:1
            }
        })
    </script>
v-once
表示元素和组件只渲染一次,不会随着数据的改变而改变


代码如下,例如:

<body>
    <div class="container">
        <h2>{{message}}</h2>
        <h2 v-once>{{message}}</h2>
    </div>
    <script src="./vue.js"></script>
    <script>
        const app = new Vue({
            el: ".container",
            data: {
                message: "Jine"
            }
        })
    </script>
</body>


图片如下:

v-html
某些情况,服务器响应回来的数据可能是元素标签(<a herf="xxx"></a>)

若我们直接通过{{}}输出,会将HTML代码也一起输出,所以要使用v-html按照HTML格式解析


代码如下,例如:

<body>
    <div class="container">
        <h1>{{message}}</h1>
        <h1 v-html="message"></h1>
    </div>
    <script src="./vue.js"></script>
    <script>
        const app = new Vue({
            el:".container",
            data:{
                message:"<a href='http://www.baidu.com'>百度一下你就知道</a>"
            }
        })
    </script>
</body>


效果图片如下:

v-text(不推荐)
会显示文本输出,但不推荐这样写法,不如Mustache语法好用。
如:再拼接字符串时候,v-text会进行覆盖而不会去拼接

所以不进行展示说明
v-pre(不推荐)
用于跳过编译过程,直接显示原内容,并不会像mustache语法进行解析

例如:

/*若message内容为:Jine*/

<h2>{{message}}</h2>
/*结果为:Jine*/

<h2 v-pre>{{message}}</h2>
/*结果为:{{message}}*/
v-cloak
意思为斗篷,再vue声明后,会将v-cloak属性删除


例如:

    <style>
        [v-cloak]{
            display: none;
        }
    </style>
</head>
<body>
    <div class="app" v-cloak>{{message}}</div>
    <script src="./vue.js"></script>
    <script>
        /*
            设置了延迟2秒的计时器,可看出效果:
                v-cloak再vue声明和绑定DOM树之前会存在
                绑定成功后:vue会自动删除Dom树中的v-cloak属性
        */
        setTimeout(() => {
            const app = new Vue({
            el:".app",
            data:{
                message:"Jine"
            }
        })
        }, 2000);
      
    </script>
</body>

v-bind(动态绑定属性)

动态绑定属性
'动态绑定属性,用来绑定一个或多个属性值。'

在开发中,有很多属性需要动态进行绑定(如:src,href,动态绑定一些类、样式等)

一般语法(v-bind:)
语法糖(:)

例如: :属性名='属性值'

若值为:null、undefined 或 false 则不会渲染到页面



有如下绑定代码,例如:


<body>
   <div class="app">
       <img v-bind:src="img" alt="">
       <a v-bind:href="url">百度一下,你就知道</a>
       <!-- 语法糖写法 -->
       <img :src="img" alt="">
   </div> 
   <script src="./vue.js"></script>
   <script>
       const app = new Vue({
           el:".app",
           data:{
               img:"https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=121352583,3553479540&fm=26&gp=0.jpg",
               url:"http://www.baidu.com"
           }
       })
   </script>
</body>
动态绑定class(对象语法)
对象语法含义:class后面跟的是一个对象

可以动态的进行控制class的添加或删除(原生写比较麻烦)


例如,点击按钮给方块动态变色,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue</title>
    <style>
        .view{
            width: 100px;
            height: 100px;
            background-color: rgb(129, 46, 115);
        }

        .changeColor{
            background-color: cadetblue;
        }
    </style>
</head>
<body>
    <div class="app">
        <div class="view" :class='{changeColor:isStatus}'></div>
        <button @click='change'>点击变色</button>
    </div>

    <script src="./vue.js"></script>
    <script>
        const app = new Vue({
            el : '.app' ,
            data : {
                isStatus : false
            },
            methods : {
                change(){
                    this.isStatus = !this.isStatus
                }
            }
        })
    </script>
</body>
</html>
动态绑定style(对象语法)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="app">
        <h2 :style='{color:col,fontSize:fs + "px"}'>哈哈哈哈哈</h2>
    </div>

    <script src="./vue.js"></script>
    <script>
        const app = new Vue({
            el : '.app' ,
            data : {
                fs : 100,
                col : "red"
            }
        })
    </script>
</body>
</html>
动态绑定class或style(数组语法,不推荐)
利用数组方式来绑定,此方法不推荐,不细写。

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

errorClass 是始终存在的,isActive 为 true 时添加activeClass 类:

<div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>


v-bind 结合 for (点击文字变色)
'第一个文字默认红色,点击哪个文字,哪个变红'


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>点字变色</title>
    <style>
        .color{
            color: red;
        }
    </style>
</head>
<body>
    <div class="container">
        <ul >
            <li v-for='(iteam,index) in list' :class="{color:isStatus===index}" @click="change(index)">{{iteam}}</li>
        </ul>
    </div>
    <script src="./vue.js"></script>
    <script>
        const app = new Vue({
            el : '.container',
            data : {
                list : ['First','Second','Third','Fourth','Fivth'],
                isStatus : 0
            },
            methods : {
                change (index) {
                    return this.isStatus = index;
                }
            }
        })
    </script>
</body>
</html>

过滤器

Vue.js 允许你自定义过滤器,被用作一些常见的文本格式化。
由"管道符"指示, 格式如下:

<!-- 在两个大括号中 -->
{{ message | capitalize }}

<!-- 在 v-bind 指令中 -->
<div v-bind:id="rawId | formatId"></div>

过滤器函数接受表达式的值作为第一个参数。


以下实例对输入的字符串第一个字母转为大写:

实例:
<div id="app">
  {{ message | capitalize }}
</div>
    
<script>
new Vue({
  el: '#app',
  data: {
    message: 'jine'
  },
  filters: {
    capitalize: function (value) {
      if (!value) return ''
      value = value.toString()
      return value.charAt(0).toUpperCase() + value.slice(1)
    }
  }
})
</script>

自定义指令

更多说明:参考Vue官方文档

例如: 定义获取元素焦点指令

Vue.directive('focus' {
	inserted : (el) => {
    //获取元素焦点
    el.focus()
}
              
})


使用:
<input type='text' v-focus>
 
带参指令,改变元素背景色,例如:

定义:

Vue.directive('color',{
	inserted : (el,binding) => {
		el.style.backgroundColor = binding.value.color
	}
})

使用:
<input type='text' v-color='{color:"red"}'>
Logo

前往低代码交流专区

更多推荐