Vue.js 基础入门,这一篇足够 !!!

Vue 简介

什么是Vue?

  • 官方给出的概念:vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面渐进式框架
  • 构建用户界面:前端每天就是在做画用户界面的工作,vue 帮助我们以更简单的方式来做这些事情
  • 渐进式:vue 不强求程序员一次性接受并使用它的全部功能和特性

框架的概念?

  • 框架指的就是程序员必须遵守的规则或约束

Vue 的官方文档(使用说明书):https://cn.vuejs.org/v2/guide/

Vue 的基本使用

Vue 的基本使用:4个步骤

<div id='app'>
    // vm 会控制这个div的渲染
</div>

<script src='./js/vue.js'></script>

<script>
	const vm = new Vue({
        el:'#app'
    })    
</script>
  • 步骤一:导入 Vue 的 JS 文件,文件中声明了一个名为 Vue 的构造函数
  • 步骤2:new Vue(),创建 Vue 的实例对象,用 vm 来表示
  • 步骤3:通过 el 选项,指定 vue 所控制的 DOM 区域
  • 步骤4: 创建 vue 所控制的 DOM 区域。 注意:选择器一定要和 el 选项的值匹配

将 Vue 中定义的数据渲染到页面

Vue 提供了 data 选项,用来定义数据,供页面渲染时使用

<div id='app'>
    <!-- vm 会控制这个 div 的渲染 --><!-- 插值表达式会拿到data中的变量的值 -->
    <p>
        姓名:{{username}}
    </p>
    <p>
        性别:{{gender}}
    </p>
</div>

<script>
	const vm = new Vue({
        el:'#app',
        data:{
            username:'张三',
            gender:'男'
        }
    })
</script>

问题:p标签放在 app 外面,还会生效吗?

答案:不会生效,app是根,必须写在app里面

Vue 的调试工具

安装 Vue-devtools 调试工具:Vue 官方提供的 Vue-devtools 调试工具,帮助我们在浏览器中调试 Vue 程序

谷歌下载地址:https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd

IE下载:扩展插件

Vue 指令 - Vue 中 6 种常见指令

指令的概念?

指令(Directives)是 Vue 为开发者提供一套特殊语法,指令可以帮助我们在**不用操作 Dom **的情况下,动态渲染页面

Vue 中的指令按照不同的用途可以分为如下 6 大类:

每个指令都与我们之前学过的 DOM 和 js 的知识有所对应
内容渲染指令(对应dom中的 文本节点
属性绑定指令(对应dom中的 属性节点
事件绑定指令(对应dom中的 事件
双向绑定指令(vue中特有的,react中想做需要自己实现)
条件渲染指令(在页面模板中写 if
列表渲染指令(在页面模板中写 for

Vue 指令 - 内容渲染指令
  • 内容渲染指令帮助开发者渲染 DOM 元素的文本内容
  • 常用的内容渲染指令有如下两个:{{}},v-html
{{}}语法:

Vue 提供的 {{}} 语法。它的专业名称是插值表达式

作用:将 Vue 中定义的 数据 动态渲染到 DOM 元素内容 的指定位置

<div id="app">
   <!-- {{}} -->
   <!-- 作用:将数据动态渲染到DOM的内容区域 -->
   <div>{{CompanyName}}</div>
   <div>{{address}}</div>
</div>

<script>
   // 创建 vm 实例对象
   const vm = new Vue({
       // 指定控制的区域
        el: '#app',
        data: {
           CompanyName: 'xxxx有限公司',
           address:'北京xxx'
        }
   });
</script>
v-html语法:

插值表达式只能渲染纯文本内容

如果要把包含 HTML 标签的字符串渲染为真正的 HTML 元素,则需要用到 v-html 这个指令

<div id="app">
   <!-- v-html -->
   <!-- 作用:将包含了html标签的字符串,渲染成真正的html标签 -->
   <p v-html="major"></p>
</div>

<script>
    // 创建 vm 实例对象
    const vm = new Vue({
        // 指定控制的区域
        el: '#app',
        data: {
            major: '<h3 style="font-weight:bold;font-size:20px;color:red">前端</h3>'
        }
    });
</script>
Vue指令 - 表达式的概念

插值表达式语法中,除了支持绑定简单的数据值之外,还支持 JavaScript 表达式的运算

什么是表达式能够得到一个值的式子

 <div id="app">
   <!-- 1.字面量 -->
     <div>{{1}}</div>
     <div>{{'abc'}}</div>
     <div>{{true}}</div>
     <div>{{[1,2,3]}}</div>
     <div>{{ {a:1} }}</div>
   <!-- 2.数学运算 -->
     <div>{{1+2}}</div>
   <!-- 3.字符串的拼接 -->
     <div>{{'a'+'bc'}}</div>
   <!-- 4.三元表达式 -->
     <div>{{age > 18 ? '成年' : '未成年'}}</div>
   <!-- 5.函数的调用 -->
     <div>{{['a','b','c','d'].join('')}}</div>
</div>

<script>
    // 创建 vm 实例对象
    const vm = new Vue({
      // 指定控制的区域
        el: '#app',
        data: {
           age: 27
        }
    });
</script>

>> 输出结果:
1
abc
true
[ 1, 2, 3 ]
{ "a": 1 }
3
abc
成年
abcd
Vue 指令 - 属性绑定指令

如果需要为 元素的属性 动态绑定 属性值 ,就可以使用 v-bind 属性绑定指令

<div id='app'>
    
    <!-- v-bind -->
    <!-- 语法:v-bind:属性名 = "属性值(data中的数据)" -->
    <input type='text' v-bind:placeholder='placeholder'>
    
    <!-- v-bind简写模式 -->
    <!-- 语法::属性名 = "属性值(data中的数据)" -->
    <input type='text' :placeholder='placeholder'>
</div>

<script>
	// 创建 vm 实例对象
       const vm = new Vue({
          // 指定控制的区域
          el: '#app',
          data: {
             placeholder: '在这里输入你的用户名'
          }
    });
</script>
Vue 指令 - 事件绑定指令

Vue 提供了 事件绑定指令 ,用来给 DOM 元素绑定事件

注意:原生 DOM 对象有 click、input、keyup 等原生事件

​ 替换为 Vue 的事件绑定形式后,分别为:v-on:click、v-on:input、v-on:keyup

<div id='app'>
	<div>数量:{{num}}</div>
    <!-- 事件绑定 v-on -->
    <!-- 语法:v-on:事件类型 = "事件处理函数" -->
    <button v-on:click="add">增加</button>
    
    <!-- 简写形式 -->
    <!-- 语法:@事件类型 = "事件处理函数" -->
    <button @click="add">增加(简写模式)</button>
    
    <!-- 如果事件处理函数中只有一行代码,可以直接写到行内去 -->
    <!-- 在模板中使用,直接就能拿到data中的数据,不需要带this -->
    <button @click="num += 1">增加(行内式)</button>
    
    <!-- 绑定事件并传参 -->
    <button @click="addNum(2)">增加(+2)</button>
    <button @click="addNum(3)">增加(+3)</button>
    <button @click="addNum(4)">增加(+4)</button>
</div>

<script>
	// 创建 vm 实例对象
    const vm = new Vue({
        // 指定控制的区域
        el:'#app',
        data:{
            num:0
        },
        methods:{
            // 事件处理函数需要定义在methods中
            // ES6的语法:简写语法:add:function(){} === add(){}  (function 和 : 都去掉)
            // ES6中,对象里面的函数的简写模式
            add(){
                // 方法中通过this.属性名来拿到data中定义的数据
                this.num += 1
            },
            addNum(n){
                // 事件传参的事件处理函数
                this.num += n;
            }
        }
    })
</script>
Vue 指令 - 事件修饰符

在原生事件处理函数中调用 event.preventDefault()event.stopPropagation() 可以对事件的行为进行控制

在Vue 中要想做这些事情是使用事件修饰符,常用的 2 个事件修饰符如下:

事件修饰符说明
.prevent阻止默认行为(例如:阻止a链接的跳转,阻止表单的提交等)
.stop阻止事件冒泡

代码演示:

<div id="app">
     <!-- 事件修饰符写在事件类型的后面 -->
     <!-- .prevnet: 事件修饰符,阻止事件的默认行为 -->
     <a href="https://www.baidu.com" @click.prevent="tobaidu">去百度</a>

     <!-- .stop:事件修饰符,阻止冒泡行为 -->
     <!-- .stop写在内层的盒子,防止它触发打印上层输出语句 -->
     <div class="outer-box" @click="outerClick">
         <div class="inner-box" @click.stop="innerClick"></div>
     </div>
</div>

<script>
    // 创建 vm 实例对象
    const vm = new Vue({
       // 指定控制的区域
         el: '#app',
         methods: {
           tobaidu() {
               console.log('ok');
           },
           innerClick() {
               console.log('innerClick');
           },
           outerClick() {
               console.log('outerClick');
           }
         }
    });
</script>
Vue 指令 - 按键修饰符

在监听键盘事件时,我们经常需要判断详细的按键。在 Vue 中,只需要为键盘事件添加按键修饰符

注意:按键修饰符只能配合键盘事件一起使用
<!-- 被 vm 实例所控制的区域 -->
    <div id="app">
        <!-- 为事件添加按键修饰符 -->
        <!-- .enter:只有按下 enter 键的时候,才触发login这个事件处理函数 -->
        <input type="text" @keyup.enter="login">
        <hr>
        <!-- 只有当按下 delete 键的时候,才会触发clearSubmit这个事件处理函数 -->
        <input type="text" @keyup.delete="clearSubmit">
    </div>

    <script>
        // 创建 vm 实例对象
        const vm = new Vue({
            // 指定控制的区域
            el: '#app',
            data: {

            },
            methods: {
                login() {
                    console.log('login success');
                },
                // e是一个事件对象
                clearSubmit(e) {
                    console.log(111);
                    // e.target.value : 可以设置这个文本框的值为空
                    e.target.value = '';
                }
            }
        });
    </script>
Vue指令 - 双向绑定 v-model 指令

Vue 中提供了 v-model 指令来做数据的双向绑定,帮助我们快速处理表单的值

数据双向绑定的特点:数据变化视图更新,视图变化数据更新

注意:v-model 只能运用在表单元素上
<div id="app">
    <!-- 使用 v-model -->
    <!-- v-model 只能配合表单元素进行使用 -->
    <input type='text' v-model='username'>
</div>

<script>
	const vm = new Vue({
        el:'#app',
        data:{
            username:'张三'
        }
    })
</script>
使用了双向绑定后,更新data数据或者视图数据,对应的绑定的数据也会自动更新
Vue 指令 - 双向绑定 v-model 指令 — 专属修饰符

为了方便对表单输入的内容进行处理,vue 为 v-model 指令提供了 3 个修饰符,分别是:

修饰符作用示例
.number自动将用户输入的值转为 number 类型

MVVM的概念

Vue 框架的特性,主要体现在如下两个方面:
  1. 数据驱动视图

    在使用 Vue 的页面中,data 数据的变化,会 导致 页面结构的 重新渲染

    示意图:

    请添加图片描述

  • 好处:减少了程序员对 DOM 的操作
  • 注意:数据驱动视图是 单向的数据绑定
  1. 双向数据绑定
    • data 数据的变化,会导致页面的重新渲染
    • 表单数据的变化,会被自动更新到 data 数据中

    示意图:

    请添加图片描述

  • 好处:开发者不再需要手动操作 DOM 元素,来获取表单元素最新的值
MVVM
  • MVVM 是 Vue 实现 数据驱动视图双向数据绑定 的核心原理
  • MVVM 指的是 Model、View 和 ViewModel.
  • 它把每个 HTML 页面都拆分成了三个部分,如图所示:
    请添加图片描述请添加图片描述
MVVM 的工作原理

ViewModel 作为 MVVM 的核心,是它把当前页面的数据源(Model)和页面的结构(View)连接在了一起

请添加图片描述

  • 数据源发生变化 时,会被 ViewModel 监听到,VM 会根据最新的数据源 自动更新 页面的结构
  • 表单元素的值发生变化 时,也会被 VM 监听到,VM 会把变化过后最新的值 自动同步 到Model数据源中
Vue 指令 - 条件渲染指令

条件渲染指令通过条件判断来控制 DOM 的显示与隐藏

条件渲染指令有如下两个,分别是:v-if 和 v-show

<div id="app">
        <button @click="toggle">切换</button>
        <button @click="flag = !flag">切换行内式简写</button>
        <!-- v-if 和 v-show 都是用来控制 DOM 元素的显示和隐藏 -->
        <!-- v-if 和 v-show 绑定的 data 数据值为 true,就显示,否则隐藏 -->
        <p v-if="flag">这是被 v-if 控制的DOM元素</p>
        <p v-show="flag">这是被 v-show 控制的DOM元素</p>
</div>

    <script>
        // 创建 vm 实例对象
        const vm = new Vue({
            // 指定控制的区域
            el: '#app',
            data: {
                flag: true,
            },
            methods: {
                toggle() {
                    this.flag = !this.flag;
                }
            }
        });
    </script>
Vue 指令 - v-if 和 v-show 的区别

实现原理不同:

  • v-if 指令会动态地创建或移除 DOM 元素,从而控制元素在页面上的显示与隐藏;
  • v-show 指令会动态为元素添加或移除 style=“display: none;” 样式,从而控制元素的显示与隐藏

性能消耗不同:

v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销

  • 如果需要非常频繁地切换,则使用 v-show 较好
  • 如果在程序运行时条件很少改变,则使用 v-if 较好
Vue 指令 - v-if 的配套指令

v-if 可以单独使用,或者配合 v-else / v-else-if 指令一起使用

注意:v-else / v-else-if 指令必须配合 v-if 指令一起使用,否则它将不会被识别 ~

代码示例:
<!-- 被 vm 实例所控制的区域 -->
    <div id="app">
        <p v-if="score > 90">优秀</p>
        <p v-else-if="score > 80 && score < 90">良好</p>
        <p v-else-if="score > 70 && score < 80">一般</p>
        <p v-else></p>
    </div>

    <script>
        // 创建 vm 实例对象
        const vm = new Vue({
            // 指定控制的区域
            el: '#app',
            data: {
                score: 93
            },
            methods: {

            }
        });
    </script>
Vue 指令 - 列表渲染指令

Vue 提供了 v-for 列表循环指令,用来辅助我们 循环渲染一个列表结构

结构: 想要循环渲染哪个元素,v-for就加在哪个元素身上

Vue: v-for 中的索引

v-for 指令还支持一个 可选 的第二个参数,即 当前项的索引

代码示例:
<div id="app">
        <ul>
            <!-- 需要循环渲染哪个元素,就在哪个元素身上添加 v-for -->
            <!-- 语法:v-for='数组中的每一项 in 数组' -->
            <!-- item 语义化:每一条,每一项 -->
            <li v-for="item in list">姓名:{{item.uname}}----年龄:{{item.age}}</li>
        </ul>

        <ul>
            <!-- 还可以添加第二个参数,即每一项的下标 -->
            <!-- 语法:v-for='(数组中的每一项,索引) in 数组' -->
            <!-- item语义化:每一条,每一项 -->
            <li v-for="(item,index) in list">索引:{{index}}----姓名:{{item.uname}}----年龄:{{item.age}}</li>
        </ul>
    </div>

    <script>
        // 创建 vm 实例对象
        const vm = new Vue({
            // 指定控制的区域
            el: '#app',
            data: {
                list: 
                [{id: 1,uname: '张三',age: 18}, 
                 {id: 2,uname: '李四',age: 20},
                 {id: 3,uname: '王五',age: 22}]
            }
        });
    </script>
Vue 指令 - v-for 中的key
什么是 v-for 中的 key?

使用 key 维护列表的状态

官方推荐在使用 v-for 指令的时候,要添加一个 key 属性

key 的作用:用来给循环的元素添加一个唯一的标识,来防止可能会出现的列表无法被正确渲染的问题

key 的注意事项?
  1. 使用 v-for 指令时 一定要指定 key 的值(既提升性能,有防止列表渲染紊乱)
  2. key 的值只能是 字符串数字类型
  3. key 的值 必须具有唯一性(建议把 数据项 id 属性的值 作为 key 的值)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值