四时宝库

程序员的知识宝库

VUE教程-(二) Vue基础语法(vue使用教程)

Vue.config.productionTip = false //阻止vue在启动时生成提示
Vue实例和容器是一一对应的

2.1 hello world 小案例

<!-- 创建容器 -->
    <div id="root">
        <h1>hello {{name}}</h1>
    </div>

    <!-- 先引入 -->
    <script src="./js/vue2.7.14.js"></script>

    <script>
        Vue.config.productionTip = false //阻止vue在启动时生成提示

        // 创建实例,只传一个参数,是对象,配置对象
        new Vue({
            el: '#root',  //el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
            data: {   //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
                name: 'zz'
            }
        })
    </script>
  • 想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象
  • demo容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法
  • demo容器里的代码被称为【Vue模板】
  • Vue实例和容器是一一对应
  • 真实开发中只有一个Vue实例,并且会配合着组件一起使用
  • {{xxx}}是Vue的语法:插值表达式,{{xxx}}可以读取到data中的所有属性
  • 一旦data中的数据发生改变,那么页面中用到该数据的地方也会自动更新(Vue实现的响应式)

2.2 模板语法

Vue模板语法有2大类:

(1)插值语法:

功能:用于解析标签体内容

写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性

(2)指令语法:

功能:用于解析标签(包括:标签属性、标签体内容、绑定事件…)

举例:v-bind:href=“xxx” 或 简写为 :href=“xxx”,xxx同样要写js表达式,且可以直接读取到data中的所有属性

<div id="root">
        <h1>增值语法</h1>
        <h3>hello {{name}}</h3>
        <hr>

        <h1>指令语法</h1>
        <a v-bind:href="school.url.toUpperCase()" x="hello">点我到{{school.name}}网页1</a>
        <a :href="school.url">点我到{{school.name}}网页2</a> <!-- 可以简写 -->

    </div>

    <script>
        Vue.config.productionTip = false
        new Vue({
            el: '#root',
            data: {
                name: 'jack',
                school: {
                    name: '百度',
                    url: 'http://www.baidu.com'
                }

            }
        })
    </script>

2.3 数据绑定

Vue中有2种数据绑定的方式:

  • 单向绑定 ( v-bind ) :数据只能从data流向页面
  • 双向绑定 ( v-model ) :数据不仅能从data流向页面,还可以从页面流向data

1.双向绑定一般都应用在表单类元素上(如:input、select等)
2.v-model:value 可以简写为 v-model,因为v-model
默认收集的就是value值

<div id="root">
        <!-- 普通写法 -->
        单向数据绑定:<input type="text" v-bind:value="name"><br>
        双向数据绑定:<input type="text" v-model:value="name"><br>

        <!-- 简写 -->
        单向数据绑定:<input type="text" :value="name"><br>
        双向数据绑定:<input type="text" v-model="name"><br>
    </div>

    <script>
        Vue.config.productionTip = false

        new Vue({
            el: '#root',
            data: {
                name: 'zz'
            }
        })
    </script>

2.4 el与data的两种写法

一个是new的时候就要想好为哪个容器所使用

一个是后面再调用

(1)el的两种写法

const v = new Vue({
            // el: '#root',    //注释掉就没办法解析了
            data: {
                name: 'zz'
            }
        })
console.log(v)
v.$mount('#root')

(2)data的两种写法

 // data的两种写法
        new Vue({
            el: '#root',

            // 对象式
            data: {
                name: 'zz'
            }

            // 函数式
            data: function () {
                return {
                    name: 'zz'
                }
            }
        })

2.5 数据代理

(1)Object.defineProperty

Object.defineProperty(obj, prop, descriptor):

obj:要定义属性的对象。
prop:要定义或修改的属性的名称
descriptor:要定义或修改的属性描述符

<script src="./js/vue2.7.14.js"></script>
    <script>
        let num = 18
        let person = {
            name: '张三',
            sex: '男'
        }
        // 传3个参数:对象,添加的属性名,配置项
        Object.defineProperty(person, 'age', {
            // value: 18,
            // enumerable:true,  //控制属性是否可以枚举(遍历),默认值false
            // writable:true,  //控制属性是否可以被修改,默认值false
            // configurable:true  //控制属性是否可以被删除,默认值false

            // 当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
            get() {
                console.log('有人读取age属性了')
                return num
            },
            // 当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
            set(value) {
                console.log('有人修改了age属性,且值是', value)
                num = value
            }
        })
        // console.log(person)
    </script>

get读取,set修改

访问器属性:本质上是用于获取和设置值的函数,但从外部代码来看就像常规属性。

由 “getter” 和 “setter” 方法表示。在对象字面量中,它们用getset表示:


(2)数据代理

数据代理:通过一个对象代理对另一个对象中属性的操作(读/写)

<script src="./js/vue2.7.14.js"></script>
    <script>
        let obj1 = { x: 100 }
        let obj2 = { y: 200 }
        Object.defineProperty(obj2, 'x', {
            get() {
                return obj1.x
            },
            set(value) {
                obj1.x = value
            }
        })
    </script>

(3)vue中的数据代理

  • Vue中的数据代理:通过vm对象来代理data对象中属性的操作(读/写)
  • Vue中数据代理的好处:更加方便的操作data中的数据
  • 基本原理:

通过Object.defineProperty()把data对象中所有属性添加到vm上。
为每一个添加到vm上的属性,都指定一个getter/setter。
在getter/setter内部去操作(读/写)data中对应的属性。

<!-- 准备好一个容器-->
<div id="root">
	<h2>学校名称:{{name}}</h2>
	<h2>学校地址:{{address}}</h2>
</div>

<script>
	const vm = new Vue({
        el: '#root',
        data: {
            name: 'zz',
            address: '天津'
        }
    })
</script>

我们在控制台打印 new 出来的 vm

可以看到,写在配置项中的 data 数据被 绑定到了 vm 对象上,是 Vue 将 _data 中的 name,address 数据 代理到 vm 本身上。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接