Vue基础入门

Vue.js 介绍

Vue.js是什么?

  • Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计 为可以自底向上逐层应用.
  • Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一 方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
  • 自底向上逐层应用:作为渐进式框架要实现的目标就是方便项目增量开发(即插即用)。
  • 官方网站: cn.vuejs.org/v2/guide/ 作者 尤雨溪是中国人.

为甚么使用Vue?

  1. 声明式渲染: 前后端分离是未来趋势
  2. 渐进式框架: 适用于各种业务需求
  3. 简单易学: 国人开发,中文文档,不存在语言障碍,易于理解和学习

Vue.js 基础

Vue.js的使用

  1. 在html页面使用script引入vue.js的库即可使用。
远程CDN 
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script> 
本地
<script src="vue.min.js"></script>
复制代码
2. Vue-CLI脚手架:使用vue.js官方提供的CLI脚本架很方便去创建vue.js工程雏形
复制代码
  • {{}}: 插值表达式
    1. 插值表达式的作用?
      通常用来获取Vue实例中定义的数据(data)
      属性节点中 不能够使用插值表达式
  • el: 挂载点
    1. el的作用 ?
      定义 Vue实例挂载的元素节点,表示vue接管该区域
    2. Vue的作用范围是什么 ?
      Vue会管理el选项命中的元素,及其内部元素
    3. el选择挂载点时,是否可以使用其他选择器 ?
      可以,但是建议使用 ID选择器
    4. 是否可以设置其他的DOM元素进行关联 ?
      可以但是建议选择DIV, 不能使用HTML和Body标签
  • data: 数据对象
    1. Vue中用到的数据定义在data中
    2. data中可以写复杂类型
    3. 渲染复杂类型数据的时候,遵守js语法

声明式渲染的好处

Vue中的声明式渲染,简单理解就是我们声明数据,Vue帮我们将数据渲染到HTML.

Vue常用指令

根据官网的介绍,指令 是带有 v- 前缀的特殊属性。通过指令来操作DOM元素

  • v-text 指令
    作用: 获取data数据, 设置标签的内容.
    注意: 默认写法会替换全部内容,使用插值表达式{{}}可以替换指定内容.

  • v-html 指令
    作用: 设置元素的 innerHTML (可以向元素中写入新的标签)

  • v-on 指令
    作用: 为元素绑定事件, 比如: v-on:click,可以简写为 @click=”方法”
    绑定的方法定义在 VUE实例的, method属性中

  • v-show指令
    作用: v-show指令, 根据真假值,切换元素的显示状态

  • v-if 指令
    作用: 根据表达值的真假,切换元素的显示和隐藏( 操纵dom 元素 )

  • v-bind 指令
    作用: 设置元素的属性 (比如:src,title,class)

  • v-for 指令
    作用: 根据数据生成列表结构

  • v-on 指令补充
    传递自定义参数 : 函数调用传参
    事件修饰符: 对事件触发的方式进行限制

  • MVVM模式

    • MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式.
    • MVVM模式将页面,分层了 M 、V、和VM ,解释为:
      • Model: 负责数据存储
      • View: 负责页面展示
      • View Model: 负责业务逻辑处理(比如Ajax请求等),对数据进行加工后交给视图展示
  • v-mode 指令
    作用: 获取和设置表单元素的值(实现双向数据绑定)

    • 双向数据绑定
      • 单向绑定: 就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新。
      • 双向绑定: 用户更新了View,Model的数据也自动被更新了,这种情况就是双向绑定。
    • 什么情况下用户可以更新View呢?
      • 填写表单就是一个最直接的例子。当用户填写表单时,View的状态就被更新了,如果此时MVVM框架可以自动更新Model的状态,那就相当于我们把Model和View做了双向绑定:

axios

axios介绍

VUE中结合网络数据进行应用的开发

  • 目前十分流行网络请求库,专门用来发送请求,其内部还是ajax,进行封装之后使用更加方便
  • axios作用: 在浏览器中可以帮助我们完成 ajax异步请求的发送.
  • Vue2.0之后,尤雨溪推荐大家用axios替换JQuery ajax

解决页面闪烁问题

  • v-cloak指令
    作用: 解决插值表达式闪烁问题
    当网络较慢,网页还在加载 Vue.js ,而导致 Vue 来不及渲染,这时页面就会显示出 Vue 源代码。我们可以使用 v-cloak 指令来解决这一问题。
  1. 添加样式
<style> 
    /* 通过属性选择器,设置 添加了v-cloak */ 
    [v-cloak] { 
        display: none; 
    } 
</style>
复制代码
  1. 在id为app的div中添加 v-cloak
<div class="wrap" id="app" v-cloak>
复制代码

computed 计算属性

什么是计算属性

在Vue应用中,在模板中双向绑定一些数据或者表达式,但是表达式如果过长,或者逻辑更为复杂时,就会变得臃肿甚至难以维护和阅读,比如下面的代码:

<div>
    写在双括号中的表达式太长了,不利于阅读 
    {{text.split(',').reverse().join(',')}} 
</div>

将这段操作text.split(',').reverse().join(',') 放到计算属性中,最终返回一个结果值就可以
复制代码

computed 的作用: 减少运算次数, 缓存运算结果. 运用于重复相同的计算.

computed总结

  1. 定义函数也可以实现与 计算属性相同的效果,都可以简化运算。
  2. 不同的是计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。

filter 过滤器

什么是过滤器

  • 过滤器是对即将显示的数据做进一步的筛选处理,然后进行显示,值得注意的是过滤器并没有改变原来的数据,只是在原数据的基础上产生新的数据。
  • 数据加工车间,对值进行筛选加工.

过滤器使用位置

  1. 双括号插值内
{{ msg | filterA }} msg是需要处理的数据, filterA是过滤器, | 这个竖线是管道,通过这个管道 将数据传输给过滤器进行过滤 加工操作
复制代码
  1. v-bind绑定的值的地方。
<h1 v-bind:id=" msg | filterA"> {{ msg }} </h1>
复制代码

过滤器

1.局部过滤器
2.全局过滤器

总结

  1. 过滤器常用来处理文本格式化的操作。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式
  2. 过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示

watch 侦听器

什么是侦听器

  • Vue.js 提供了一个方法 watch,它用于观察Vue实例上的数据变动。
  • 作用: 当你有一些数据需要随着其它数据变动而变动时,可以使用侦听属性

Component 组件

组件介绍

  • 组件(Component)是自定义封装的功能。在前端开发过程中,经常出现多个网页的功能是重复的,而且很多不同的页面之间,也存在同样的功能。
  • 我们将相同的功能进行抽取,封装为组件,这样,前端人员就可以在组件化开发时,只需要书写一次代码,随处引入即可使用。
  • 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树

全局组件

语法格式:

Vue.component("组件名称", { 
    template: "html代码", // 组件的HTML结构代码 
    data(){ //组件数据 
        return {} 
    },
    methods: { // 组件的相关的js方法 
        方法名(){ 
            // 逻辑代码 
        } 
    } 
})
复制代码

注意:

  1. 组件名以小写开头,采用短横线分割命名: 例如 hello-Word
  2. 组件中的data 必须是一个函数,注意与Vue实例中的data区分
  3. 在template模板中, 只能有一个根元素

局部组件

  • 相比起全局组件,局部组件只能在同一个实例内才能被调用。局部组件的写法和全局组件差不多。 唯一不同就是:局部组件要写在Vue实例里面。
new Vue({ 
    el: "#app", 
    components: { 
        组件名: { 
            // 组件结构 
            template: "HTML代码", 
            // data数据 
            data() { return { msg:"xxxx" };}, 
        }, 
    }, 
});
复制代码

注意:
创建局部组件,注意 components,注意末尾有 ‘s’,而全局组件是不用+ ‘s’ 的。这意味着,components 里可以创建多个组件。

组件与模板分离

由于把html语言写在组件里面很不方便,也不太好看所以将它们分开写。

<body> 
    <div id="app"> 
        <web-msg></web-msg> 
    </div> 
    
    <!-- 将模板写在HTML中, 给模板指定一个ID --> 
    <template id="tmp1"> 
        <div> 
            <button @click="show">{{msg}}</button> 
        </div> 
    </template> 
</body> 

<script src="./vue.min.js"></script> 
<script> 
    var VM = new Vue({ 
        el: "#app", 
        components: { 
            "web-msg": { 
                template: "#tmp1", 
                data() { 
                    return { 
                        msg: "点击查询", 
                    }; 
                },
                methods: { 
                    show() { 
                        alert("正在查询,请稍等..."); 
                    }, 
                }, 
             },
             "web-msg2": {}, 
         }, 
    }); 
</script>
复制代码

总结:

  1. 上面这种写法,浏览器会把 html 里的 template 标签过滤掉。所以 template 标签的内容是不会在页面中展示的。直到它被 JS 中的 Vue 调用。
  2. 在 html 中,template 标签一定要有一个 id,因为通过 id 是最直接被选中的。 data 和 methods等 参数,全部都要放到 Vue 实例里面写

Vue生命周期

钩子函数介绍

生命周期中的钩子函数
钩子函数:钩子函数是在一个事件触发的时候,在系统级捕获到了他,然后做一些操作

函数 说明
beforeCreate() 在创建Vue实例之前,可以执行这个方法. 例如 加载动画操作
created() 实例创建完成,属性绑定好了,但是DOM还没有生成
beforeMount() 模板已经在内存中编辑完成了,尚未被渲染到页面中
mounted() 内存中的模板已经渲染到页面,用户已经可以看见内容
beforeUpdate() 数据更新的前一刻 , 组件在发生更新之前,调用的函数
updated() updated执行时,内存中的数据已更新,并且页面已经被渲染
beforeDestroy () 钩子函数在实例销毁之前调用
destroyed () 钩子函数在Vue 实例销毁后调用

Vue Router 路由

什么是路由?

  • 在Web开发中,路由是指根据URL分配到对应的处理程序。 路由允许我们通过不同的 URL 访问不同的内容。
  • 通过 Vue.js 可以实现多视图单页面web应用(single page web application,SPA)

什么是SPA ?

  • 单页面Web应用(single page web application,SPA),就是只有一张Web页面的应用,是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序。
  • 单页应用不存在页面跳转,它本身只有一个HTML页面。我们传统意义上的页面跳转在单页应用的概念下转变为了 body 内某些元素的替换和更新,举个例子:
  • 整个body的内容从登录组件变成了欢迎页组件, 从视觉上感受页面已经进行了跳转。但实际上,页面只是随着用户操作,实现了局部内容更新,依然还是在index.html 页面中。
  • 单页面应用的好处:
  1. 用户操作体验好,用户不用刷新页面,整个交互过程都是通过Ajax来操作。
  2. 适合前后端分离开发,服务端提供http接口,前端请求http接口获取数据,使用JS进行客户端渲染。

路由相关的概念

  • router :
    是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用(SPA)变得易如反掌 ,router 就相当于一个管理者,它来管理路由。
  • route:
    ruter相当于路由器, route就相当于一条路由.比如: Home按钮  => home内容, 这是一条route,news按钮 => news内容, 这是另一条路由。
  • routes :
    是一组路由,把上面的每一条路由组合起来,形成一个数组。[{home 按钮 =>home内容 }, { about按钮 => about 内容}]
  • router-link组件:
    router-link 是一个组件,是对标签的一个封装. 该组件用于设置一个导航链接,切换不同 HTML内容。 to 属性为目标地址, 即要显示的内容
  • router-view 组件:
    路由导航到指定组件后,进行渲染显示页面.

路由总结

  1. router是Vue中的路由管理器对象,用来管理路由.
  2. route是路由对象,一个路由就对应了一条访问路径,一组路由用routes表示
  3. 每个路由对象都有两部分 path(路径)和component (组件)
  4. router-link 是对a标签的封装,通过to属性指定连接
  5. router-view 路由访问到指定组件后,进行页面展示
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享