认识vue

vue是一套用于构建用户界面的渐进式(轻量级)框架,可以构建出复杂的单页面应用程序,vue与原生js显著的区别就是不再对dom进行直接的操作,而是通过数据操作来改变视图,只关系底层逻辑,尽量减少dom操作。

1)mvc:适用于dom驱动

m:业务模型 model 事件

v:用户模型 view HTML

c:控制器 control JS

html-->model-->js

js-->model-->html

2)mvvm:是mvc的改良版,适用于

m : model js

v :view html

vm :viewModel v+m

html<-->vm<-->js

安装

与其他框架类似,在使用之前要先进行依赖的安装。

1)cdn 在cdn加速服务器中获取vue的库直接进行导入即可,这种方式更加便捷

2)npm 模块化安装,这种方式一般需要在node环境下进行开发,然后编译打包后才能应用到浏览器中 > npm install vue

3)vue-cli Vue脚手架,可用于快速搭建大型单页面应用,用于企业级开发。

生命周期

在一个项目中可以有多个模板,每个模板可以有自己的实例

//引入vue环境
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.js"></script>
<div id=“app”>
     <div v-on:click=”foo">{{title}}</div>//模板渲染
</div>
<script>
  let vm = new Vue({		实例化vue对象,vm为实例,Vue为构造函数
	el:"#app",		指定模板
	data:{     保存数据,在根组件中是对象,如果是子组件是函数
	    title:"this is a vue"
	}
	methods:{
	    foo(){alert(this.title);}  方法,如果想要更新data数据,使用this.
	}
  });
</script>

首先要了解vue的生命周期:

https://upload-images.jianshu.io/upload_images/13119812-eaf493b1b2050a93.png
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 引入链接 引入环境 -->
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.min.js"></script>
    <!-- 引入线图 -->
    <script src="http://cdn.highcharts.com.cn/highcharts/highcharts.js"></script>
</head>
<body>
    <!-- 模板 -->
    <div id="app">
        <div id="one" v-on:click='changText' style="width: 400px;height: 400px;background-color: red;"></div>
        {{msg}}
    </div>
    <script>
        new Vue({
            el:'#app',//指定模板
            data:{
                msg:'hello'
            },
            //初始化之前 data,methods中数据还不能被使用
            beforeCreate(){
               console.log('beforeCreate----')
            },
            //数据初始化完成 data,methods中数据已经初始化完成可以进行访问使用
            //但是没有进行挂载
            created(){
            //    console.log(this.msg)
            // this.test()
            console.log('created')
            // console.log(document.getElementById('one'))
            // this.loadChart()//没有挂载 加载不出来图表效果
            },
            //挂载之前 判断当前的实例所绑定的模板是哪一个 但是仍然没有挂载
            beforeMount(){
                console.log('beforeMount')
            },
            //挂载完成
            mounted(){
                this.loadChart()
                console.log('mounted')
            },
            //更新之前
            beforeUpdate(){
                console.log(this.msg)
                console.log('beforeUpdate')
            },
            //更新完成
            update(){
                console.log('update')
                console.log(this.msg)
            },
            //组件销毁之前
            beforeDestroy(){
                console.log('beforeDestroy')
            },
            //销毁完成
            destroyed(){
                console.log('destroyed')
            },
            methods:{
                changText(){
                   if(this.msg=='hello'){
                       this.msg='你好'
                   }else if(this.msg=='你好'){
                       this.msg='hello'
                   }
                },
                test(){
                    console.log('test')
                },
                //加载图表
                loadChart(){
                // 图表配置
         var options = {
            chart: {
                type: 'bar'        //指定图表的类型,默认是折线图(line)
            },
            title: {
                text: '我的第一个图表'                 // 标题
            },
            xAxis: {
                categories: ['苹果', '香蕉', '橙子']   // x 轴分类
            },
            yAxis: {
                title: {
                    text: '吃水果个数'                // y 轴标题
                }
            },
            series: [{                              // 数据列
                name: '小明',                        // 数据列名
                data: [1, 0, 4]                     // 数据
            }, {
                name: '小红',
                data: [5, 7, 3]
            }]
        };
        // 图表初始化函数
        var chart = Highcharts.chart('one', options);
                }
            }
        })
    </script>
</body>
</html>

在上面的代码中:

beforeCreate 在初始化之前,只是声明了data中的属性和method中的方法,还不能访问,这时候打印属性undefined,方法未定义。

created 初始化完毕,完成了vue的数据注入及数据监听操作,该构造的执行意味着vue实例创建完毕,可以进行数据的访问操作,但是没有完成挂载,代码中插入了一个线图框架代码,这时候调用this.loadChart(),只会显示外框架,dom节点没有挂载,加载不出图表效果。

beforeMount 在created之后,vue会判断实例中是否含有el属性,如果没有会调用vm.$mount(el) ,接着会判断是否含有template属性,如果有将其解析为一个render function ,如果没有会将el指定的外部html进行解析。这里只是完成了模板的解析但是数据并没有绑定到模板中,并没有实现挂载。

mounted 创建vm.$el替换el,实际上这里完成的是数据绑定操作,在期间执行了render函数,将模板进行了解析,将数据进行了动态绑定,也就是实现了挂载。这时候调用this.loadChart(),dom节点实现了挂载,图表效果加载出来了。

截止到现在,vue已经将页面显示了出来。随着用户的操作会引起数据改变进而导致页面刷新

beforeUpdate 更新虚拟dom节点。

updated 完成了页面的重新渲染

beforeDestroy 销毁之前调用,此时还是可以访问vue实例的

destroyed 完成了监听器,子组件,事件监听等移除,销毁vue实例对象

插值

<body>
    <div id="app">
        <p>{{name+"hello"}}-{{age+20}}</p>
        <p v-html='str'>hello</p>
        <p v-bind:id="id" v-bind:title="title"></p>
        <p :id="id"></p>  //简写
        <p v-on:click="handler">click</p>
        <p @click='handler'>click----</p>  //简写
    </div>
</body>

Vue中有新的定义方式: 带有 v- 前缀的被称为指令,以表示它们是 Vue 提供的特殊 attribute,它们会在渲染的 DOM 上应用特殊的响应式行为。

文本 {{}}<span>Message: {{ msg }}</span>
v-text<span v-text='msg'></span>单纯的去识别渲染文本
v-html<div v-html='msg'></div>会解析html标签,然后再渲染文本
v-bind:属性名<div v-bind:id="dynamicId"></div>用于绑定数据和元素属性
事件 v-on<a v-on:click="doSomething">...</a>添加一个事件监听器,通过它调用在 Vue 实例中定义的方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值