Vue01

作者: knot98 | 来源:发表于2018-10-26 14:42 被阅读0次

一、认识Vue

定义:一个构建数据驱动的 web 界面的渐进式框架

优点:

1、可以完全通过客户端浏览器渲染页面,服务器端只提供数据

2、方便构建单页面应用程序(SPA)

二、引入Vue

<div id="app">
    <p title="p"></p>
    <p v-bind:title='title'></p>
</div>
<script type="text/javascript" src="vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            title: 'vue-p'
        }
    })
</script>

三、Vue实例

  • 实例:el
<div id='app'>
    
</div>
<script>
    new Vue({
        el: '#app'
    })
</script>
  • 数据:data
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>vue实例之data</title>
</head>
<body>
    <div id="app">
        <!-- 插值表达式 -->
        {{ msg }}
        {{ num }}
        <!-- 插值表达式中可以进行运算 -->
        {{ 1 + 2 + 3 * 4 }}
    </div>
</body>
<script src="js/vue-2.5.17.js"></script>
<script type="text/javascript">
    var app = new Vue({
        el: "#app",
        // data: 数据
        // 为挂载点内部的vue变量提供值
        data: {
            msg: "hello world!",
            num: 88888
        }

    })
</script>
<script type="text/javascript">
    // 普通js代码块
    // 获取msg,num变量的值

    // 1.得到vue实例
    console.log(app);
    // 2.获取vue变量data: $data
    console.log(app.$data);
    // 3.获取目标变量值
    console.log(app.$data.msg);

    // 直接获取值
    console.log(app.msg);
    console.log(app.num);
</script>
</html>
  • 方法:methods
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>methods</title>
    <style type="text/css">
        .box {
            background-color: orange
        }
    </style>
</head>
<body>
    <div id="app">
        <!-- v-on: 指令,操作事件的 -->
        <p class="box" v-on:click="abcClick">{{ abc }}</p>
        <p class="box" v-on:click="defClick">{{ def }}</p>
        <p class="box" v-on:mouseover="action">88888</p>
    </div>
</body>
<script src="js/vue-2.5.17.js"></script>
<script type="text/javascript">
    new Vue({
        el: '#app',
        data: {
            abc: "12345 上山打老虎 老虎不在家 ...",
            def: "67890 呵呵"
        },
        // methods为挂载点内部提供方法的实现体
        methods: {
            abcClick: function (ev) {
                console.log(ev);
                console.log("abc is clicked");
            },
            defClick (ev) {
                console.log(ev);
                console.log("def is clicked");
            },
            action () {
                console.log("被悬浮");
            }
        }
    })
</script>
</html>
  • 计算属性:computed
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>computed</title>
</head>
<body>
    <div id="app">
        <div>
            <!-- v-model vue进行数据双向绑定的指令 -->
            <label for="xing">姓:</label><input type="text" name="xing" v-model="fisrt_name">
        </div>
        <div>
            <label for="ming">名:</label><input type="text" name="ming" v-model="last_name">
        </div>
        <div>
            <!-- 通过插值表达式实现 -->
            <div>姓名: {{ fisrt_name + " " + last_name }} </div>
            <!-- 通过computed实现 -->
            <div>姓名: {{ full_name }} </div>
            <!-- 通过methods实现 -->
            <div>姓名: {{ full_name_bac() }} </div>
        </div>
    </div>
</body>
<script src="js/vue-2.5.17.js"></script>
<script type="text/javascript">
    new Vue({
        el: "#app",
        data: {
            fisrt_name: "",
            last_name: "",
            // full_name: ""
        },
        // 一个变量依赖于多个变量
        // 采用computed
        computed: {
            full_name: function () {
                // full_name对fisrt_name及last_name两个变量进行监听,两个值只有有一个变化,full_name就会随之变化,并且可以实时渲染到页面
                return this.fisrt_name + " " + this.last_name;
            }
        },
        methods: {
            full_name_bac: function () {
                return this.fisrt_name + " " + this.last_name;
            }
        }
    })
</script>
</html>
  • 监听器:watch
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>watch</title>
</head>
<body>
    <div id="app">
        <div>
            <label>姓名:</label>
            <input type="text" v-model="full_name">
        </div>
        <p>姓: {{ first_name }} </p>
        <p>名: {{ last_name }} </p>
    </div>
</body>
<script src="js/vue-2.5.17.js"></script>
<script type="text/javascript">
    // 多个变量依赖于一个变量, 对该变量进行监听
    new Vue({
        el: "#app",
        data: {
            full_name: "",
            first_name: "",
            last_name: ""
        },
        // 监听full_name变量,通过full_name具体修改first_name,last_name
        watch: {
            full_name () {
                var fullName = this.full_name;
                console.log(fullName);
                this.first_name = fullName.split(" ")[0];
                this.last_name = fullName.split(" ")[1];
            }
        }
    })
</script>
</html>
  • 分隔符:delimiters
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>delimiters</title>
</head>
<body>
    <div id="app">
        {{ msg }} ${ msg }
    </div>
</body>
<script src="js/vue-2.5.17.js"></script>
<script type="text/javascript">
    new Vue({
        el: '#app',
        data: {
            msg: 'message'
        },
        delimiters: ['${', '}']
    })
</script>
</html>
  • 实例对象使用成员属性与方法
<script>
    var app = new Vue({
        el: '#app',
        data: {
            msg: 'message'
        }
    })
    console.log(app)
    console.log(app.$el)
    console.log(app.$data.msg)
    console.log(app.msg)
</script>

四、实例生命周期钩子

代码示例:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>生命周期钩子</title>
</head>
<body>
    <div id="app">
        {{ msg }}
    </div>
</body>
<script src="js/vue-2.5.17.js"></script>
<script type="text/javascript">
    new Vue({
        el: "#app",
        data: {
            msg: "message"
        },
        beforeCreate () {
            console.log("实例刚刚创建");
            console.log(this.msg);
        },
        created () {
            console.log("实例创建成功, data, methods");
            console.log(this.msg);
        }
        // 拿到需求 => 确定钩子函数 => 解决需求的逻辑代码块
    })
</script>
</html>
  • 定义
每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。
  • 钩子方法
beforeCreate:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。

created:在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。

beforeMount:在挂载开始之前被调用:相关的 render 函数首次被调用。

mounted:el被新创建的vm.$el替换,并挂载到实例上去之后调用该钩子。

beforeUpdate:数据更新时调用,发生在虚拟 DOM 打补丁之前。

updated:数据更新时调用,发生在虚拟 DOM 打补丁之前。

activated:keep-alive 组件激活时调用。

deactivated:keep-alive 组件停用时调用。

beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。

destroyed:Vue实例销毁后调用。调用后,Vue实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

errorCaptured:2.5.0+ 新增,当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播。
  • 重点钩子
created:实例完全创建完毕(属性与方法都准备就绪)。可以进行数据操作(请求后台数据,重新渲染最新数据)

mounted:虚拟DOM构建完毕,并完成实例的el挂载。可以重新操作页面DOM

相关文章

  • Nexus npm install 报错E401

    背景是搭建nexus后,npm install 无法使用[root@es vue01]# npm isntalln...

  • VUE01

    vm是什么? 差值表达式 v-text指令 v-HTML指令 v-bind v-for v-model v-on ...

  • vue01

    添加事件 添加 {{vel}} 删除 new Vue({ el:'.you', data:{ sg:['dd','...

  • Vue01

    一、认识Vue 定义:一个构建数据驱动的 web 界面的渐进式框架 优点: 1、可以完全通过客户端浏览器渲染页面,...

  • vue01

    vue复习: vue-resource他会将一个$http属性挂载vm上 $http是定义在vue的原型上,实例上...

  • vue01

    vue01 vue到底是什么? 一个mvvm框架(库)、和angular类似,比较容易上手、小巧 vue和angu...

  • Vue01

    目录 1.1.认识Vuejs 为什么学习Vuejs 1.vue在国内领域是必备技能。 Vue的渐进式 1.把vue...

  • vue01

    webstrom中常用的快捷键一:标签自动补全:(1)纯标签补全例:输入h1,按Tab键, (2)纯标签+地址“i...

  • VUE01:Vue编程模式

    要使用Vue,顺带做个笔记,无他!  1. 理解Vue的封装对象;  2.Vue的入门使用;  Vue可以直接使用...

  • Vue01组件化实践-03 插槽 slot

    组件化 slot 插槽 demo github地址:feature/slot 分支 直接上代码体会插槽的使用吧

网友评论

      本文标题:Vue01

      本文链接:https://www.haomeiwen.com/subject/xjoktqtx.html