zoukankan      html  css  js  c++  java
  • vue基本使用及脚手架使用

    一、基本使用:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    
    <body>
    
        <div id="app">
            <ul>
                <li v-for="(item,index) in list">{{item}}</li>
            </ul>
            <div ref="box" id="app111">{{message}}</div>
            <button @click="handleUpdate()">修改数据</button>
        </div>
    
        <button onClick="destory()">销毁</button>
    </body>
    
    </html>
        <!-- 必须导入的vue文件 -->
    <script src="vue.js"></script>
    
    <script>
        var vm = new Vue({
            el: "#app",
            beforeCreate() {
                console.log("beforeCreate.....");
                console.log(this.message)
            },
            created() {
                console.log("created.....");
                setTimeout(() => {
                    for (var i = 0; i < 10; i++) {
                        this.list.push(i);
                    }
                    this.message = "zhang"
                }, 3000)
            },
            data: {
                list: [],
                message: ""
            },
            computed:{
                
            },
            beforeMount() {
                console.log("beforeMount...");
                console.log(this.$refs)
                console.log(app.innerHTML)
            },
            mounted() {
                console.log("mounted...");
                console.log(this.$refs)
                console.log(app.innerHTML)
            },
            beforeDestroy() {
                console.log("beforeDestroy.....");
                console.log(this.$refs)
                console.log(app.innerHTML)
                console.log(this.message)
            },
            destroyed() {
                console.log("destroyed......")
                console.log(this.$refs)
                console.log(app.innerHTML)
                console.log(this.message)
            },
            methods: {
                handleUpdate() {
                    this.message = "张三" + new Date().getTime()
                },
            },
            beforeUpdate() {
                console.log("beforeUpdate");
                console.log(app.innerHTML)
                // console.log(app.innerText)
            },
            updated() {
                console.log("updated")
                console.log(app.innerHTML)
                // console.log(app.innerText)
            }
    
        })
    
        function destory() {
            alert(1)
            vm.$destroy()
        }
    
    </script>

      1、计算属性与methods

    /*
    computed:
        计算属性:通过属性计算得来的属性
        只要属性发生变化那么该方法就会被调用
        computed里面的方法调用的时候是不需要加()
        
        computed计算属性,如果属性的值没有变化的时候会从缓存中进行读取。而不是重新计算
    
        methods:里面的方法每次调用的时候都会重新执行   相比较来说非常耗费性能
    
    v-model.number:将字符串转换为数字
    */

      2、methods 与 computed watch三者之间的区别

    /*
            methods  与 computed  watch三者之间的区别
    
            methods:里面书写的是方法,调用的时候需要加() 每次执行的时候内部所以的参数都会重新执行
            
            computed:计算属性,当计算完毕以后会将计算的结果保存在缓存中,第二次在进行计算的时候
            如果数据没有发生变化,那么会从缓存中读取结果。性能要比methods高.计算属性调用的时候是不
            需要加()的
    
            watch:监听属性的变化。watch是不需要调用的,只要属性发生了变化,那么就会接受到2个值
            一个是新值 一个是旧值。watch是高频率事件  如果能用computed实现的功能尽量不要用watch
                            深度监听:监听对象的时候,增加deep:true
    
        */

        另:属性监听<!DOCTYPE html>

    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <div id="app">
            <input type="text" v-model="firstName">
            <input type="text" v-model="lastName">
            <h3>我的名字叫{{fullName}}--------------{{names}}</h3>
            <hr>
            <input type="text" v-model="obj.name">
            <input type="text" v-model="obj.age">
    
            <button @click="handleDeep()">开始监听</button>
        </div>
    </body>
    </html>
    <script src="vue.js"></script>
    <script>
    
        /*
            属性监听
                watch  当属性发生改变的时候用来监听属性的变化
    
                watch里面的方法名字都是属性的key值
        */
        var vm = new Vue({
            el:"#app",
            data:{
                firstName:"",
                lastName:"",
                fullName:"",
                obj:{
                    name:"张三",
                    age:22
                }
            },
            methods:{
                handleDeep(){
                    this.$watch("obj",()=>{
                        console.log("调用了")
                    },{
                        deep:true
                    })
                }
            },
         computed:{ names(){
    return this.firstName+this.lastName; } },
         //能用computed解决的,尽量不用watch watch:{ firstName(newVal,oldVal){
    if(!//g.test(newVal)){ this.fullName = newVal + this.lastName; } }, lastName(newVal,oldVal){ this.fullName =this.firstName+ newVal; }, obj:{ handler(){ console.log("obj调用了") },
             //监听对象时需要深度监听,需要加deep:true deep:
    true } }
    })
    </script>

      3、生命周期

    /*
          创建前
          beforeCreate当初始化的时候读取生命周期函数,但是不能进行调用  
    
          created:当beforeCreate初始化完毕以后,会执行created。当执行created的时候会读取当前vm
          身上所以的属性(把所有的属性都添加一个getter和setter方法)和方法遍历挂载到vue的实例身上。在created中可以访问到数据和方法了
            (可以做的事情:ajax的请求)
    
            //outerHTML不是w3c的规范
    
            beforeMount当执行beforeMount的读取到所有的虚拟DOM,和数据进行结合,但是没有生产真
            正的DOm结构但是这里面是访问不到虚拟DOM的
    
            mounted:挂载完成,在这里面虚拟DOM和数据结合完成后生成真正的DOM结构,在这里可以使用refs
            进行dom的操作
             使用一些插件进行实例化的时候我们都可以在这里面进行操作  例如 swiper  better-scroll
    
            beforeDestroy:销毁前是可以访问到当前dom的元素,但是销毁后也就destroyed就不能访问到
            dom元素了.把vm与DOM之间的关联全部断开
    
            beforeUpdate:当数据进行修改的时候会执行beforeUpdate,但是数据不会立马进行更新,而是
            数据和模板进行相结合的状态
            updated数据和模板结合完毕生成新的DOM结构
                    
                    后学新增:(keep-alive 包裹动态组件component 时)
                    activated:        当组件进入活跃状态的时候
                    deactivated:    当组件为缓存状态的时候
    
        */

       4、常用的实例化方法

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <div id="app">
            <p>年龄:{{age}}</p>
                    <p>姓名:{{message}}</p>
        </div>
    
    
    
        <button onClick="add()">添加el</button>
        <button onClick="destroy()">销毁</button>
        <button onClick="forceUpdate()">强制更新</button>
    </body>
    </html>
    <script src="vue.js"></script>
    <script>
        var vm = new Vue({
                // el:"#app",
            data:{
                message:"李想"
            }
        })
        vm.age = 19;
            console.log(vm)
      function add(){
          //外部设置el  设置vue的作用域
          vm.$mount("#app");
      }
    
      function destroy() { 
          //销毁vm实例与DOM之间的关联
          vm.$destroy()
      }
    
      function forceUpdate() { 
          //如果说属性没有getter/setter方法的时候我们可以调用以下这个方法进行强制更新
          vm.$forceUpdate();
       }
    </script>
    /*
    实例身上的方法
    $on:绑定事件

    $emit:触发事件

    $off:解绑事件

    $once:触发一次

    $mount:手动挂载

    $destroy:销毁

    $forecUpdate:强制更新

    $nextTick()
    */
     

    二、脚手架的使用

    <!-- 
      全局安装:
        npm install vue-cli -g 脚手架的安装:
        vue init webpack-simple myapp (myapp 为要新建的文件名字) 后,按照黑窗口指令 cd myapp 切换到当前文件 npm install 或 cnpm install 安装依赖 npm run dev 运行
    -->

    之后,就可以正常使用喽

  • 相关阅读:
    Scale-Invariant Error
    Regularizing Deep Networks with Semantic Data Augmentation
    BBN: Bilateral-Branch Network with Cumulative Learning for Long-Tailed Visual Recognition
    2021.5.17
    2021.5.14
    2021.5.13
    2021.5.12
    2021.5.8
    2021.5.7 团队冲刺第十天
    2021.5.6 团队冲刺第九天
  • 原文地址:https://www.cnblogs.com/-roc/p/9982012.html
Copyright © 2011-2022 走看看