Vue初探及相关入门指令

介绍

vue是构建用户界面的渐进式 JavaScript 框架

  • 故而我们在理解上要专注于“渐进式”三字——主张最少:核心很小,需要什么,安装什么。

五大块核心

指令、组件、路由、状态管理、UI库和第三方插件。

两大核心组成

数据驱动和组件系统 。越了解vue越可以体会到“数据驱动”的真正含义哈哈哈,后面会慢慢普及到。

(这一点万分重要)!!!vue数据驱动可以提高效率,自动监控数据变化,数据变化时让视图自动变化,我们就不用手工做DOM操作,data里的数据是被监控的响应数据,放在object.defineProperty()

优点  

1.轻量级的数据框架
2.双向数据绑定
3.提供了指令
4.组件化开发
5.客户端路由
6.状态管理

缺点

1.Vue 底层基于 Object.defineProperty 实现响应式,而这个 api 本身不支持 IE8 及以下浏 览器,所以Vue不支持IE8及其以下浏览器;
2.Vue 打造的是SPA,所以不利于搜索引擎优化(SEO);
3.由于 CSR的先天不足,导致首屏加载时间长,有可能会出现闪屏。

理解MVVM模式

M-model模型
V-view视图
VM-viewModel 视图模型
模型(model)通过视图模型决定视图(view)
视图(view)通过视图模型修改模型 (model) 
视图模型是模型和视图之间的桥梁。

理解SPA

single page application,单页面应用。

优点:加载快,用户体验好

缺点:不利于SEO,首屏加载时间长

a页面—>index.html/#/a

b页面—>index.html/#/b

理解MPA

Multi-page Application,多页面应用。

优点:有利于SEO

缺点:会有白屏,用户体验不好

a页面—>a.html

b页面—>b.html

Vue实例

1、如何用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 1.引入 -->
    <script src="./vue.js"></script>
</head>
<body>
    <!-- 2.作用范围 -->
    <div id="app">
        <div>{{1+1}}</div>
        <div>{{2+2}}</div>
    </div> 

    <script>
        // 3.实例化vue
        new Vue({
            el:"#app"
        })
    </script>
</body>
</html>

2、el

new Vue({
            //挂载点  mount-挂载
            //1.一个vue对象只能作用在1个节点上,如果el有多个节点满足条件,也只作用在满足条件的第一个节点上。
            //2.Do not mount Vue to <html> or <body> - mount to normal elements instead.
                // 不要把vue挂到html|body上
            // 3.由于一个vue只能作用在一个节点上,所以一般使用id
            el:"#app"
        })

3、data methods

new Vue({
  //挂载点  mount-挂载
  el:"#app",
  //属性
  data:{
    a:1,
    b:false,
    c:"嘻嘻嘻",
    tel:"15727273030"
  },
  //方法
  methods:{
    fn1(){},
    fn2(){},
    fn3(){}
  }
})  

4、{{差值表达式}} js模板引擎,mustache表达式

模板template:含有变量(差值表达式)的HTML

<div id="box"> {{str}} </div>
    <script>
        // console.log(Vue);
        let vm = new Vue({
            el:'#box',
            data:{
                str:'hello world'  //响应式数据
            }
        })
    </script>

相关指令

1、v-on

v-on:click="" 简写“@click” ,v-on:click="事件处理函数的名字"

2、v-cloak,该指令生效需要在style声明如下

<style>
        [v-cloak]{
            display: none;
        }
 </style>

3、v-text,绑定变量到元素上,解决花括号闪烁问题

4、v-html , 不但可以绑定变量,还可以渲染html,解析标签

5、v-once ,绑定一次,数据不再变化

<!-- 一次性数据绑定 -->
<div v-once>{{name}}</div>

6、v-bind:value="" 单向数据绑定,简写为“:”,单向的意思是,数据变化,视图会变化;视图变化,数据不会变化

7、v-model="" 双向数据绑定,数据变化,视图会变化 ;视图变化,数据就变化

   v-model的修饰符:

(1).number:输入字符串转为有效数字

(2).lazy:取代 input 监听 change 事件

(3).trim:输入首尾空格过滤

8、v-if,条件渲染,值为真才会渲染,下面以分数等级为例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="box">
            <input type="text" v-model="scores">
            <!-- {{scores>=60?"及格":"不及格"}} -->
            <p v-if="scores>=0 && scores<60">
                不及格
            </p>
            <p v-else-if="scores>=60 && scores<=80 ">
                及格
            </p>
            <p v-else-if="scores>=81 && scores<=90 ">
               良好
            </p>
            <p v-else-if="scores>=91 && scores<=100 ">
                优秀
             </p>
             <p v-else>
               数据错误
             </p>
    </div>
    <script>
        // v-if   v-else-if   v-else  条件渲染  惰性的,值为真的时候才渲染
        //0--60 不及格  60-80 及格  81-90 良好  91-100 优秀
        new Vue({
            el:"#box",
            data:{
                scores:0,  //分数
                result:"" //分数对应的等级
            }
        })
    </script>
</body>
</html>

9、v-show,本质为切换css属性  false时是设置display为none 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="box">
            <p v-show="visible">hello world</p>
            <button v-on:click="visible=!visible">切换</button>
            <input type="checkbox" v-model="visible" />
    </div>
    <script>
        new Vue({
            el:"#box",
            data:{
                visible:true
            },
            // methods:{
            //     toggle(){  //切换显示和隐藏
            //         this.visible=!this.visible
            //     }
            // }
        })
    </script>
</body>
</html>

10、v-for,相当于循环遍历


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="box">
        <ul>
            <li v-for="(item,index) in arr" v-bind:key="item.id">{{item.name}}</li>
        </ul>
        <button v-on:click="add">add</button>
    </div>
    <script>
        new Vue({
            el:"#box",
            data:{
                arr:[
                    {
                        id:1,
                        "name":"aaa"
                    },
                    {
                        id:2,
                        "name":"bbb"
                    },
                    {
                        id:3,
                        "name":'ccc'
                    },
                    {
                        id:4,
                        "name":"dddd"
                    }
                ]
            },
            methods:{
                add(){
                    this.arr.unshift({
                        id:Date.now(),  //获取当前的时间戳
                        "name":"cccdsf"
                    })
                }
            }
        })
    </script>
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值