0
点赞
收藏
分享

微信扫一扫

【VUE】基础

Jonescy 2022-01-26 阅读 123

初识VUE

        (vue.js开发版本-会多一些可读性错误提示,vue.min.js生产版本)

1. 想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象;

2. app容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法;

3. app容器里的代码被称为【Vue模板】;

<!-- 准备好一个容器 -->
<div id="app">
    <h1>Hello,{{name}},{{address}},{{Date.now()}}</h1>
</div>

4. Vue实例和容器是一一对应的(一个实例对应多个容器,则除了第一个容器其他容器的Vue语法都不能正常解析;多个实例对应一个容器,被第一个Vue实例接管后面的实例也运行但不会在容器中体现,会报错);

5. 真实开发中只有一个Vue实例,并且会配合着组件一起使用;

6. {{XXX}}中XXX要写js表达式,且XXX可以自动读取到data中的所有属性;

7. 一旦data中的数据发生改变,那么模板中用到该数据的地方也会自动更新

        PS: js表达式 和 js代码(语句)

                1.表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方:

                        (1).a

                        (2).a+b

                        (3).demo(1)

                        (4).x === y ? 'a' : 'b'

                2. js代码(语句)

                        (1).if(){}

                        (2).for(){}

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>vue入门</title>
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
        <!-- 准备好一个容器 -->
		<div id="app">
			<h1>Hello,{{name}},{{address}},{{Date.now()}}</h1>
		</div>

		<script type = "text/javascript">
            Vue.config.productionTip = false //阻止vue在启动时生成生产提示。

            // 创建Vue实例
		    new Vue({
		    	el: '#app', // el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串
		    	data: { // data中用于存储数据,数据供el所指定的容器去使用,值这里暂时先写成一个对象
				    name:'武林外传',
                    address:'七侠镇'
			    }
		    })
	    </script>
	</body>
</html>

模板语法

1. 插值语法:

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

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

2. 指令语法:

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

        举例:【v-bind:href="xxx"】 或 简写成 【:href="xxx"】,xxx同样要写js表达式,且可以直接                      读取到data中所有属性。

        备注:Vue中有很多指令,且形式都是:【v-????】,此处只拿v-bind举例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>模板语法</title>
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
        <!-- 准备好一个容器 -->
		<div id="app">
			<h1>插值语法</h1>
            <h3>你好,{{name}}</h3>
            </hr>
            <h1>指令语法</h1>
            <!-- 页面标签显示【<a v-bind:href = "HTTP://WWW.BAIDU.COM">点我去百度一下</a>】 -->
            <a v-bind:href = "link.url.toUpperCase()">点我去{{link.name}}一下</a>
            <a :href = "link.url">点我去{{link.name}}两下</a>
		</div>
	</body>
	<script type = "text/javascript">
        Vue.config.productionTip = false

        // 创建Vue实例
	    new Vue({
		    el: '#app',
		    data: { 
			    name:'武林外传',
                link:{
                    name:'百度',
                    url:'http://www.baidu.com'
                }
			}
		})
    </script>
</html>

Vue的两种数据绑定方式

1. 单向绑定(v-bind):数据只能从data流向页面。

2. 双向绑定(v-model):数据不仅能从data流向页面,还可以从页面流向data。

        备注:

                (1). 双向绑定一般都应用在表单类元素上(如: input、select等) 

                (2). 【v-model:value】 可以简写成 【v-model】,因为v-model默认收集的是value值。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>数据绑定</title>
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
        <!-- 准备好一个容器 -->
		<div id="app">
            单向数据绑定:<input type="text" v-bind:value="name"/>
            <br/>
            双向数据绑定:<input type="text" v-model:value="name"/>
            <!-- 简写:
                    单向数据绑定:<input type="text" :value="name"/>
                    双向数据绑定:<input type="text" v-model="name"/>
            -->
            <!-- 下行代码是错误的,因为v-module只能应用在表单类(输入类)元素(有value值)上 -->
            <h2 v-model:x="name">你好</h2>
		</div>
	</body>
	<script type = "text/javascript">
        Vue.config.productionTip = false

        // 创建Vue实例
	    new Vue({
		    el: '#app',
		    data: { 
			    name:'尚硅谷',
			}
		})
    </script>
</html>

 el与data的两种写法

1. el的两种写法

        (1). new Vue 时配置el属性

        (2). 先创建Vue实例,随后再通过vm.$mount('#app')指定el的值

2. data的两种写法

        (1). 对象式

        (2). 函数式

        如何选择:使用组件时,data必须使用函数式,否则会报错。

3. 一个重要原则

        由Vue管理的函数,一定不要写箭头函数,一旦写了箭头函数,this就不再是Vue实例了。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>el与data的两种写法</title>
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
        <!-- 准备好一个容器 -->
		<div id="app">
            <h1>你好,{{name}}</h1>
		</div>
	</body>
	<script type = "text/javascript">
        Vue.config.productionTip = false
        // el的两种写法
        /*
	    const v = new Vue({
		    //el: '#app', //第一种写法
		    data: { 
			    name:'尚硅谷'
			}
		})
        console.log(v)//输出vue实例
        // 挂载-根据需求再将容器模板与vue实例匹配
        v.$mount('#app') //第二种写法
        */
        
        //data的两种写法
	    new Vue({
		    el: '#app',
            //data的第一种写法:对象式
            /*
		    data: { 
			    name:'尚硅谷'
			}
            */
            
            //data的第二种写法:函数式
            data:function(){ //简写 data(){
                console.log('@@@',this)//此处的this是Vue实例对象
                return{
			        name:'尚硅谷'
                }
			}
		})
    </script>
</html>

 data:function(){console.log('@@@',this) return{ }} //普通函数

  data:()=>{console.log('@@@',this) return{ }} //箭头函数 没有自己的this

 MVVM模型

  • MVVM:页面输入改变数据,数据改变影响页面数据展示与渲染
    • M(model):普通的javascript数据对象,对应data中的数据
    • V(view):->DOM 前端展示页面,模板容器
    • VM(ViewModel):用于双向绑定数据与页面,对于我们来说,就是vue的实例
  • data中所有的属性,最后都出现在了vm身上
  • vm身上所有的属性及Vue原型上所有的属性,在Vue模板中都可以直接使用

 

 数据代理

 1. Object.definedProperty方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Object.definedProperty方法</title>
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
	    <script type = "text/javascript">
            let person = {
                name:'张三',
                sex:'男',
                //age:18 //此处定义的age可以被遍历
            }
            // 对追加的属性进行高级的限制
            Object.definedProperty(person,'age',{
                value:18,
                // 此时age属性不可以被遍历
                enumerable:false,//控制属性是否可以枚举(遍历),默认值是false
                writable:true,//控制属性是否可以被修改,默认值是false
                configurable:true //控制属性是否可以被删除,默认值是false
            })
            //Object.keys(对象) 可以把传入对象所有属性的属性名提取出来变成数组
            console.log(Object.keys(person))//["name","sex"]
            //遍历对象属性值
            for (let key in person){
                console.log(person[key])
                // 张三
                // 男
            }
            console.log(person)//{name:"张三", sex:"男"[, age:18不被遍历]}
        </script>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Object.definedProperty方法</title>
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
	    <script type = "text/javascript">
            let number = 18
            let person = {
                name:'张三',
                sex:'男',
            }
            Object.definedProperty(person,'age',{
                //当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
                get:function(){ //简写成get(){
                    return number
                },
                //当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
                set(value){
                    number = value;
                }
            })
        </script>
	</body>
</html>

2. 数据代理

  • 数据代理:通过一个对象代理对另一个对象中的属性操作(读/写)
    • 如下可以通过obj2对obj.x进行操作

 3.  Vue中的数据代理

 

举报

相关推荐

前端-vue基础-vue基础

【Vue】Vue基础入门

vue 基础

Vue基础

vue基础

Vue 基础

Vue.js------vue基础

Vue2.0-vue基础

0 条评论