Vue框架学习记录

目录

一.简介

二.基本语法

1.创建Vue实例

①data的两种写法:

②el的两种写法:

2.插值表达式

3.Vue指令

①数据绑定

②事件绑定

③属性绑定

④显示数据(v-text和v-html)

⑤计算属性

⑥条件渲染(v-if)

⑦列表渲染(v-for)


一.简介

概述:Vue是一款前端渐进式框架,可以提高前端开发效率。

特点

​ Vue通过MVVM模式,能够实现视图与模型的双向绑定。

​ 简单来说,就是数据变化的时候, 页面会自动刷新, 页面变化的时候,数据也会自动变化.

二.基本语法

1.创建Vue实例

①data的两种写法:

<body>
     <!-- 准备好一个容器-->
       <div id="root">
			<h1>你好,{{name}}</h1>
		</div>
</body>

<script type="text/javascript">
  Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
  new Vue({
			el:'#root',//指定,该对象代表<div id="root">,也就是说,这个div中的所有内容,都被当前的vue对象管理
			//data的第一种写法:对象式
			/* data:{
				name:'小李'
			} */

			//data的第二种写法:函数式
			data(){
				return{
					name:'小李'
				}
			}
		})
</script>

这里最好使用data的函数式写法,这才是在写组件时被认可的写法

②el的两种写法:

<body>
     <!-- 准备好一个容器-->
       <div id="root">
			<h1>你好,{{name}}</h1>
		</div>
</body>

<script type="text/javascript">
  Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
        //el的两种写法
		const v = new Vue({
			//el:'#root', //第一种写法
			data:{
				name:'小李'
			}
		})
		console.log(v)
		v.$mount('#root') //第二种写法,挂载
        /*
  new Vue({
			el:'#root',//指定,该对象代表<div id="root">,也就是说,这个div中的所有内容,都被当前的vue对象管理
			data(){
				return{
					name:'小李'
				}
			}
		})*/
</script>

注意:

  1. 想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象
  2. root容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法
  3. root容器里的代码被称为Vue模板
  4. Vue实例与容器是一一对应的
  5. 真实开发中只有一个Vue实例,并且会配合着组件一起使用

2.插值表达式

  • 功能:用于解析标签体内容
  • 写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有区域
<body>
    <div id="root">
        <h3>你好,{{name}}!</h3>
    </div>

    <script>
        Vue.config.productionTip = false 
        new Vue({
            el:'#root', 
            data:{ 
                name:'小李',
            }
        })
    </script>
</body>

3.Vue指令

①数据绑定

<body>
    <div id="root">
        单向数据绑定:<input type="text" v-bind:value="name"><br>
        双向数据绑定:<input type="text" v-model:value="name">
    </div>

    <script>
        Vue.config.productionTip = false 
        new Vue({
            el:'#root', 
            data:{
                name:'小李'
            }
        })
    </script>
</body>

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

  • 单向绑定(v-bind):数据只能从data流向页面, v-bind可简化成只保留冒号

  • 双向绑定(v-model):数据不仅能从data流向页面,还可以从页面流向data,双向绑定一般都应用在表单类元素上(如:<input><select><textarea>等)

②事件绑定

<div id="root">
        <div><input type="button" value="点我执行m1" v-on:click="m1"></div>
        <div><input type="button" value="点我执行m2" @click="m2"></div>
        <div>{{count}}</div>
</div>

<script>
        Vue.config.productionTip = false 
        new Vue({
            el:'#root', 
            data: function () {
               return { count: 0 };
            },
            methods: {
               m1() {
                 this.count ++;
                 console.log("m1")
                },
              m2() {
                 this.count --;
                 console.log("m2")
                }
            }
        })
</script>

注意:

  • v-on的简写方式:可以把 v-on: 替换为 @

  • 在 methods 方法中的 this 代表的是 data 函数返回的数据对象

③属性绑定

<div id="root">
        <div><input type="text" v-bind:value="name"></div>
        <div><input type="date" v-bind:value="birthday"></div>
        <div><input type="text" :value="age"></div>
</div>
<script>
        Vue.config.productionTip = false 
        new Vue({
            el:'#root', 
             data: function () {
               return { name: '王五', birthday: '1995-05-01', age: 20 };
            }
        })
</script>

④显示数据(v-text和v-html)

概述:

​ v-text和v-html专门用来展示数据, 其作用和插值表达式类似。​ 当网速比较慢时, 使用{{}}来展示数据, 有可能会产生插值闪烁问题。v-text和v-html可以避免插值闪烁问题.

补充(插值闪烁): 在数据未加载完成时,页面会显示出原始的{{}}, 过一会才会展示正常数据

语法:

v-text:<span v-text="msg"></span>    <!-- 相当于<span>{{msg}}</span> -->
v-html:<span v-html="msg"></span>    <!-- 相当于<span>{{msg}}</span> -->

区别

v-text:把数据当作纯文本显示.
v-html:遇到html标签,会正常解析

⑤计算属性

<div id="root">
        <h2>{{fullName}}</h2>
        <h2>{{fullName}}</h2>
        <h2>{{fullName}}</h2>
</div>
<script>
        Vue.config.productionTip = false 
        new Vue({
            el:'#root', 
            data: function () {
                return { firstName: '三', lastName: '张' };
                },
             /* methods: {
                 fullName() {
                  console.log('进入了 fullName')
                  return this.lastName + this.firstName;
                  }
             },*/
            computed: {
               fullName() {
                console.log('进入了 fullName')
                return this.lastName + this.firstName;
                }
             }
          })
</script>

注意:

  • 普通方法调用必须加 (),没有缓存功能

  • 计算属性使用时就把它当属性来用,不加 (),有缓存功能:

    一次计算后,会将结果缓存,下次再计算时,只要数据没有变化,不会重新计算,直接返回缓存结果

⑥条件渲染(v-if)

 <body>
    <div id="app">
      <p v-if="num > 0.5">随机数 > 0.5</p>
      <p v-else>随机数 ≤ 0.5</p>
      <hr />
      <p v-if="type === 'A'">优秀</p>
      <p v-else-if="type === 'B'">良好</p>
      <p v-else-if="type === 'C'">一般</p>
      <p v-else>差</p>
      <div v-show="a"> 
        测试
      </div>
      <button @click="f">点击</button>
    </div>

    <script>
      const vm = {
        data: function(){
          return {
            // 生成 1 以内的随机数
            num: Math.random(),
            // 类型
            type: 'A',
            a : false 
          }
        },
        methods:{
          f:function(){
            this.a = !this.a
          }
        }
      }
      const app = Vue.createApp(vm)
      app.mount('#app')
    </script>
  </body>
</html>

注意:

v-if="表达式":适用于:切换频率较低的场景。

                        特点:不展示的DOM元素直接被移除。

v-show="表达式": 适用于:切换频率较高的场景。

                             特点:不展示的DOM元素未被移除,仅仅是使用样式隐藏掉

⑦列表渲染(v-for)

1.遍历数组

①v-for="item in items"
②v-for="(item,index) in items"

items:要迭代的数组
item:存储数组元素的变量名
index:迭代到的当前元素索引,从0开始

<div id="app">
	<ul>
        <li v-for="(user, index) in users">
        	{{index}}--{{user.name}}--{{user.age}}--{{user.gender}}
        </li>
	</ul>
</div>
<script>
    var app = new Vue({
        el:"#app",//el即element,要渲染的页面元素
        data: {
            users:[
                {"name":"白1","age":8,"gender":"男"},
                {"name":"白2","age":12,"gender":"女"},
                {"name":"白3","age":4,"gender":"男"}
            ]
        }
    });
</script>

显示结果:

2.遍历对象

①v-for="value in object"
②v-for="(value,key) in object"
③v-for="(value,key,index) in object"

value,对象的值
key, 对象的键
index, 索引,从0开始

       <!-- 准备好一个容器-->
		<div id="app">
			<ul>
				<li v-for="(value,key,index) in person">
					{{index}}--{{key}}--{{value}}
				</li>
			</ul>
		</div>
		<script>
			var app = new Vue({
				el:"#app",//el即element,要渲染的页面元素
				data: {
					person:{"name":"白大锅", "age":3, "address":"中国"}
				}
			});
		</script>

显示结果:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值