2.1 Vue 模板语法

html 中包含了一些JS语法代码,语法分为两种,分别为:

  1. 【插值语法】双大括号表达式 (“Mustache”语法)【一个】
  2. 【指令语法】指令(以v-开头的自定义标签属性)【很多】

    2.1.1 插值语法

    功能:用于解析标签体内容
    写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性
    插值语法:双大括号表达式

  3. 语法: {{exp}}

  4. 功能: 向页面输出数据
  5. 可以调用对象的方法

里面写js表达式:有返回值的js代码,而不是js语句
data里面也可以放对象,例如下面例子中的school,指令语法也是一样,也可以用data里的对象名去.对象属性,例如:v-bind:href="school.url"
代码演示:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>第一个Vue</title>
  6. <!-- 引入vue -->
  7. <script type="text/javascript" src="../vuejs/vue.js"></script>
  8. </head>
  9. <body>
  10. <!-- 准备一个容器,用户展示 Vue 构建的对象 -->
  11. <div id="root">
  12. <h1>插值语法</h1>
  13. <h3>您好! {{name}}</h3>
  14. <h3>您好! {{school.name}}</h3>
  15. <hr/>
  16. </div>
  17. <script type="text/javascript">
  18. //设置为 false 以阻止 vue 在启动时生成生产提示。
  19. Vue.config.productionTip = false
  20. //创建Vue实例
  21. new Vue({
  22. el:'#root',//el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
  23. data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
  24. name:'Jack',
  25. school:{
  26. name:'李四',
  27. url:'https://baidu.com'
  28. }
  29. }
  30. });
  31. </script>
  32. </body>
  33. </html>

演示效果:
image.png

2.1.2 指令语法

功能:用于解析标签(包括:标签属性、标签体内容、绑定事件…)
举例:v-bind:href=“xxx” 或 简写为 :href=“xxx”,xxx 同样要写js表达式,且可以直接读取到data中的所有属性
备注:Vue中有很多的指令,且形式都是:v-???
代码演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>第一个Vue</title>
    <!-- 引入vue -->
    <script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
    <!-- 准备一个容器,用户展示 Vue 构建的对象 -->
    <div id="root">
        <h1>指令语法</h1>
        <h3><a v-bind:href="url">去百度一下</a></h3>
        <hr/>
    </div>
    <script type="text/javascript">
        //设置为 false 以阻止 vue 在启动时生成生产提示。
        Vue.config.productionTip = false

        //创建Vue实例
        new Vue({
            el:'#root',//el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
            data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
                url:'https://baidu.com'
            }
        });
    </script>
</body>
</html>

演示效果:

image.pngimage.png
**v-bind**可以动态的绑定属性值,例如:v-bind:x="name"在 Vue 对象的data里就要有个 name的属性,v-band的简写形式 :,例如::href="url"

2.2 数据绑定

2.2.1 单向数据绑定

语法:v-bind:href ="xxx" 或简写为 :href ="xxx"
特点:数据只能从 data流向页面,页面修改的值无法回填给data
代码演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>第一个Vue</title>
    <!-- 引入vue -->
    <script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
    <!-- 准备一个容器,用户展示 Vue 构建的对象 -->
    <div id="root">
        单向数据绑定:<input type="text" v-bind:value="name">
    </div>
    <script type="text/javascript">
        //设置为 false 以阻止 vue 在启动时生成生产提示。
        Vue.config.productionTip = false
        //创建Vue实例
        new Vue({
            el:'#root',//el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
            data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
                name:'Jack',
            }
        });
    </script>
</body>
</html>

演示效果:
下面可以看到我修改了文本框里的值,data 里的 name 没有任何改变
image.png

2.2.2 双向数据绑定

指令 v-model
语法:v-mode:value="xxx" 或简写为 v-model="xxx", 因为v-model默认收集的就是 value 值
特点:数据不仅能从 data 流向页面,还能从页面流向 data,不是所有元素都支持双向绑定,<h1></h1>h 标签就不支持双向绑定,v-model只能用于表单类元素(输入类元素,如:input、select等)
代码演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>第一个Vue</title>
    <!-- 引入vue -->
    <script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
    <!-- 准备一个容器,用户展示 Vue 构建的对象 -->
    <div id="root">
        单向数据绑定:<input type="text" v-bind:value="name"><br/>
        双向数据绑定:<input type="text" v-model:value="age" ><p>{{age}}</p>
    </div>
    <script type="text/javascript">
        //设置为 false 以阻止 vue 在启动时生成生产提示。
        Vue.config.productionTip = false
        //创建Vue实例
        new Vue({
            el:'#root',//el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
            data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
                name:'Jack',
                age:18,
            }
        });
    </script>
</body>
</html>

演示效果:
可以看到双向绑定文本框值改变的时候,data 里的值也跟着改变,页面上的{{age}}也会改变
image.png
image.png

2.3 el 与 data 的表示方式

设置代码片段
image.png
选择好使用的位置,在 HTML 页面中的使用方式v1 + TAB
image.png

2.3.1 el 的表示方式

el的表示方式有两种

第一种方式

创建Vue实例对象时配置el属性
代码演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>第一个Vue</title>
    <!-- 引入vue -->
    <script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
    <!-- 准备一个容器,用户展示 Vue 构建的对象 -->
    <div id="root">
        <h1>您好,{{name}}</h1>
    </div>
    <script type="text/javascript">
        //设置为 false 以阻止 vue 在启动时生成生产提示。
        Vue.config.productionTip = false
        //创建Vue实例
        new Vue({
            el:'#root',
            data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
                name:'Jack'
            }
        });
    </script>
</body>
</html>

演示效果
image.png

第二种方式

先创建Vue实例,随后再通过vm.$mount( '#root ')指定el的值
我们先输出一下Vue对象实例,下面所有的带$符号的都是Vue给我们能调用的属性
image.png
Vue实例中,我们能找对Vue的原型 Prototype,通过对原型的修改,可以实现就对象挂载到容器中,Prototype中的$mount是指定将对象挂载指定标识中、可以是idclass等。
image.png
代码演示:
从下面的代码可以看到,将Vue实例挂载到#root中,#root在绑定在标签上

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>第一个Vue</title>
    <!-- 引入vue -->
    <script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
    <!-- 准备一个容器,用户展示 Vue 构建的对象 -->
    <div id="root">
        <h1>您好,{{name}}</h1>
    </div>
    <script type="text/javascript">
        //设置为 false 以阻止 vue 在启动时生成生产提示。
        Vue.config.productionTip = false
        //创建Vue实例
        const v = new Vue({
            data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
                name:'Jack'
            }
        });
        console.log(v);
        v.$mount('#root');
    </script>
</body>
</html>

演示效果:
image.png

2.3.2 data 的表现方式

如何选择: 目前哪种写法都可以,以后到组件时,data必须使用函数,否则会报错—个重要的原则
Vue管理的函数,一定不要写箭头函数,否则this 就不再是 Vue实例了

2.3.2.1 对象式

语法:data:{}
代码演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>第一个Vue</title>
    <script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
    <div id="root">
        <h1>您好,{{name}}</h1>
    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false
        new Vue({
            el:'#root',
            data:{
                name:'Jack'
            }
        });
    </script>
</body>
</html>

演示效果:
image.png

2.3.2.2 函数式

语法:data:function(){return{name:'Jack'}} 简写方式 data(){}
特点:函数式方法必须要返回一个对象,data:function(){return{name:'Jack'}}在函数中的 thisVue实例
注意:如果是箭头函数表示data:()=>{console.log(this) return(name:'Jack')}里面的this就是全局的Window对象,因为箭头函数没有自己的this只能往上一个层级找,所以就找到了Window
代码演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>第一个Vue</title>
    <script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
    <div id="root">
        <h1>您好,{{name}}</h1>
    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false
        new Vue({
            el:'#root',
            data:function () {
                console.log(this)//此处的 this 是 Vue 实例
                return{
                    name:'Jack'
                }
            }
        });
    </script>
</body>
</html>

演示效果:
image.png