zoukankan      html  css  js  c++  java
  • Vue1.0基础学习笔记整理

        最近一直在使用Vue.js开发项目,现将在学习过程中遇到的一些学习小细节总结如下:

     1、只处理单次插值,今后的数据变化就不会再引起插值更新了

    <span>This will never change: {{* msg }}</span>      

      2、为了输出真的 HTML 字符串,需要用三 Mustache 标签]

    <div>{{{ raw_html }}}</div>

    3、v-bind缩写

    <!-- 完整语法 -->
    <a v-bind:href="url"></a>
    <!-- 缩写 -->
    <a :href="url"></a>
    <!-- 完整语法 -->
    <button v-bind:disabled="someDynamicCondition">Button</button>
    <!-- 缩写 -->
    <button :disabled="someDynamicCondition">Button</button>

     4、v-on缩写

    <!-- 完整语法 -->
    <a v-on:click="doSomething"></a>
    <!-- 缩写 -->
    <a @click="doSomething"></a>

     5、v-if与v-show的区别

    1、v-if 有更高的切换消耗
    2、 v-show 有更高的初始渲染消耗 因此,如果需要频繁切换 v-show 较好,如果在运行时条件不大可能改变 v-if 较好。
    3、v-show也是条件渲染指令,和v-if指令不同的是,使用v-show指令的元素始终会被渲染到HTML,它只是简单地为元素设置CSS的style属性。

     6、v-bind:class

           一、v-bind:class 数组语法

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>v-bind:class 数组语法</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <style>
            .red{
                color: red;
            }
            .blue{
                background: blue;
            }
        </style>
        <script src="vue.js"></script>
        <script>
            window.onload=function(){
                new Vue({
                    el:'#box',
                    data:{
                        red:'red',
                        blue:'blue'
                    },
                    methods:{
                    }
                });
            };
        </script>
    </head>
    <body>
        <div id="box">
            <strong :class="[red,blue]">v-bind:class数组语法</strong>
        </div>
    </body>
    </html>

          二、v-bind:class 对象语法

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>v-bind:class 对象语法</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <style>
            .red{
                color: red;
            }
            .blue{
                background: blue;
            }
        </style>
        <script src="vue.js"></script>
        <script>
            window.onload=function(){
                new Vue({
                    el:'#box',
                    data:{
                    },
                    methods:{
                    }
                });
            };
        </script>
    </head>
    <body>
        <div id="box">
            <strong :class="{red:true,blue:true}">v-bind:class对象语法</strong>
        </div>
    </body>
    </html>

    7、v-bind:style

             一、v-bind:style 数组语法

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>v-bind:style 数组语法</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <style>
            .red{
                color: red;
            }
            .blue{
                background: blue;
            }
        </style>
        <script src="vue.js"></script>
        <script>
            window.onload=function(){
                new Vue({
                    el:'#box',
                    data:{
                        red:{color:'red'},
                        blue:{backgroundColor:'blue'}
                    },
                    methods:{
                    }
                });
            };
        </script>
    </head>
    <body>
        <div id="box">
            <strong :style="[red,blue]">v-bind:style数组语法</strong>
        </div>
    </body>
    </html>

              二、v-bind:style 对象语法

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>v-bind:style 对象语法</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <style>
            .red{
                color: red;
            }
            .blue{
                background: blue;
            }
        </style>
        <script src="vue.js"></script>
        <script>
            window.onload=function(){
                new Vue({
                    el:'#box',
                    data:{
                        a:{
                            color:'red',
                            backgroundColor:'gray'
                        }
                    },
                    methods:{
                    }
                });
            };
        </script>
    </head>
    <body>
        <div id="box">
            <strong :style="a">v-bind:style 对象语法</strong>
        </div>
    </body>
    </html>

    8、v-for 循环

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>v-for 循环</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <script src="vue.js"></script>
        <script>
            window.onload = function () {
                new Vue({
                    el: '#box',
                    data: {
                        json: {a: 'apple', b: 'banana', c: 'orange'}
                    }
                });
            };
        </script>
    </head>
    <body>
    <h1>json:{a:'apple',b:'banana',c:'orange'}</h1>
    <div id="box">
        <h3> v-for="value in json"</h3>
        <hr>
        <ul>
            <li v-for="value in json">
                value: {{value}} $index: {{$index}}
            </li>
        </ul>
        <h3> v-for="value in json"</h3>
        <hr>
        <ul>
            <li v-for="value in json">
                value: {{value}} $index: {{$index}} $key: {{$key}}
            </li>
        </ul>
        <h3> v-for="(k,v) in json"</h3>
        <hr>
        <ul>
            <li v-for="(k,v) in json">
                k: {{k}} v: {{v}} $index:{{$index}} $key: {{$key}}
            </li>
        </ul>
    </div>
    </body>
    </html>

    9、vue基本雏形

                <div id="box">
                    {{msg}}
                </div>
    
                var c=new Vue({
                    el:'#box',    //选择器  class tagName
                    data:{
                        msg:'welcome vue'
                    }
                });

    10、vue事件

        v-on:click/mouseover......
        
        简写的:
        @click=""        推荐
    
        事件对象:
            @click="show($event)"
        事件冒泡:
            阻止冒泡:  
                a). ev.cancelBubble=true;
                b). @click.stop    推荐
        默认行为(默认事件):
            阻止默认行为:
                a). ev.preventDefault();
                b). @contextmenu.prevent    推荐
        键盘:
            @keydown    $event    ev.keyCode
            @keyup
    
            常用键:
                回车
                    a). @keyup.13
                    b). @keyup.enter
                上、下、左、右
                    @keyup/keydown.left
                    @keyup/keydown.right
                    @keyup/keydown.up
                    @keyup/keydown.down

    11、vue属性

    
        v-bind:src=""
            width/height/title....
        
        简写:
        :src=""    推荐
        <img src="{{url}}" alt="">    效果能出来,但是会报一个404错误
        <img v-bind:src="url" alt="">    效果可以出来,不会发404请求
    -----------------------------------------
    class和style:
    :class
    ="" v-bind:class="" :style="" v-bind:style="" :class="[red]" red是数据 :class="[red,b,c,d]" :class="{red:a, blue:false}" :class="json" data:{ json:{red:a, blue:false} } ----------------------------------------- style: :style="[c]" :style="[c,d]" 注意: 复合样式,采用驼峰命名法 :style="json"

    12、vue模板

        {{msg}}     数据更新模板变化
    {{
    *msg}} 数据只绑定一次
    {{{msg}}} HTML转意输出

    13、vue过滤器

       过滤模板数据
    
        系统提供一些过滤器:   
        {{msg| filterA}}
        {{msg| filterA | filterB}}
    
        uppercase    eg:    {{'welcome'| uppercase}}
        lowercase
        capitalize
        currency    钱
    {{msg
    | filterA 参数}}
    debounce 配合事件,延迟执行
    数据配合使用过滤器: limitBy 限制几个 limitBy 参数(取几个) limitBy 取几个 从哪开始 filterBy 过滤数据 filterBy ‘谁’ orderBy 排序 orderBy 谁
    1/-1 1 -> 正序 2 -> 倒序
    自定义过滤器: model
    ->过滤 -> view
    Vue.filter(name,
    function(input){ }); 时间转化器 过滤html标记 双向过滤器:*

    Vue.filter('filterHtml',{ read:function(input){ //model-view return input.replace(/<[^<+]>/g,''); }, write:function(val){ //view -> model return val; } });

    14、vue交互   

     如果vue想做交互
     引入: vue-resouce
    this.$http({
            url:地址
            data:给后台提交数据,
            method:'get'/post/jsonp
            jsonp:'cb' //cbName
        });
    get: 获取一个普通文本数据:
    this.$http.get('aa.txt').then(function(res){ alert(res.data); },function(res){ alert(res.status); }); 给服务发送数据:√ this.$http.get('get.php',{ a:1, b:2 }).then(function(res){ alert(res.data); },function(res){ alert(res.status); }); post: this.$http.post('post.php',{ a:1, b:20 },{ emulateJSON:true }).then(function(res){ alert(res.data); },function(res){ alert(res.status); }); jsonp: https://sug.so.360.cn/suggest?callback=suggest_so&word=a https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=a&cb=jshow this.$http.jsonp('https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',{ wd:'a' },{ jsonp:'cb' //callback名字,默认名字就是"callback" }).then(function(res){ alert(res.data.s); },function(res){ alert(res.status); });

    15、vue生命周期

    	钩子函数:
    	created	        ->   实例已经创建	√
    	beforeCompile	->   编译之前
    	compiled	->   编译之后
    	ready		->   插入到文档中	√
    	beforeDestroy	->   销毁之前
    	destroyed	->   销毁之后
    

    16、vue防止闪烁

          用户会看到花括号标记:
          v-cloak    防止闪烁, 比较大段落

    17、vue计算属性的使用

        computed:{
            b:function(){    //默认调用get
                return 值
            }
        }

    ---------------------------------------------------------------------- computed:{ b:{ get: set: } } * computed里面可以放置一些业务逻辑代码,一定记得return

    18、vue实例简单方法

        vm.$el         ->  获取元素
        vm.$data       ->  获取data
        vm.$mount      ->  手动挂在vue程序
        vm.$options    ->  获取自定义属性
        vm.$destroy    ->  销毁对象
        vm.$log()      ->  查看现在数据的状态

    19、vue循环

        v-for="value in data"
        会有重复数据?
        track-by='索引'    提高循环性能
        track-by='$index/uid'

    20、vue自定义指令

       语法:
        Vue.directive(指令名称,function(参数){
            this.el    -> 原生DOM元素
        });
        <div v-red="参数"></div>
        指令名称:     v-red  ->  red
    
        * 注意: 必须以 v-开头
    
    自定义元素指令:
        Vue.elementDirective('v-red',{
            bind:function(){
                this.el.style.background='red';
            }
        });

    21、vue自定义键盘信息

        Vue.directive('on').keyCodes.ctrl=17;
        Vue.directive('on').keyCodes.myenter=13;

    22、vue数据监听变化

        vm.$el/$mount/$options/....
        vm.$watch(name,fnCb);  //浅度
        vm.$watch(name,fnCb,{deep:true});  //深度监视 

    23、vue过渡(动画)

        本质走的css3: transtion ,animation
        <div id="div1" v-show="bSign" transition="fade"></div>
        动画:
            .fade-transition{          
            }
            进入:
            .fade-enter{
                opacity: 0;
            }
            离开:
            .fade-leave{
                opacity: 0;
                transform: translateX(200px);
            }

    24、Vue组件

    组件: 一个大对象
    定义一个组件: 1. 全局组件 var Aaa=Vue.extend({ template:'
    <h3>我是标题3</h3>' }); Vue.component('aaa',Aaa); *组件里面放数据: data必须是函数的形式,函数必须返回一个对象(json)
    2. 局部组件 放到某个组件内部 var vm=new Vue({ el:'#box', data:{ bSign:true }, components:{ //局部组件 aaa:Aaa } }); ------------------------------------ 另一种编写方式: Vue.component('my-aaa',{ template:'
    <strong></strong>' }); var vm=new Vue({ el:'#box', components:{ 'my-aaa':{ template:'<h2>标题2</h2>' } } }); ----------------------------------- 配合模板: 1. template:'<h2 @click="change">标题2->{{msg}}</h2>' 2. 单独放到某个地方 a). <script type="x-template" id="aaa"> <h2 @click="change">标题2->{{msg}}</h2> </script> b). <template id="aaa"> <h1>标题1</h1> <ul> <li v-for="val in arr"> {{val}} </li> </ul> </template> ----------------------------------- 动态组件: <component :is="组件名称"></component> -------------------------------------------- vue-devtools -> 调试工具 https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd -------------------------------------------- vue默认情况下,子组件也没法访问父组件数据 组件数据传递: √ 1. 子组件就想获取父组件data 在调用子组件: <bbb :m="数据"></bbb> 子组件之内: props:['m','myMsg'] props:{ 'm':String, 'myMsg':Number } 2. 父级获取子级数据 *子组件把自己的数据,发送到父级 vm.$emit(事件名,数据); v-on: @ -------------------------------------------- vm.$dispatch(事件名,数据) 子级向父级发送数据 vm.$broadcast(事件名,数据) 父级向子级广播数据 配合: event:{} 在vue2.0里面已经,报废了

    25、Vue  slot

        位置、槽口
        作用: 占个位置
        类似ng里面 transclude  (指令)

    26、Vue路由

    
    
     如果vue想做路由
     引入: vue-router
    html:
        <a v-link="{path:'/home'}">主页</a>    跳转链接
        
        展示内容:
        <router-view></router-view>
    js:
        //1. 准备一个根组件
        var App=Vue.extend();
    
        //2. Home News组件都准备
        var Home=Vue.extend({
            template:'<h3>我是主页</h3>'
        });
    
        var News=Vue.extend({
            template:'<h3>我是新闻</h3>'
        });
    
        //3. 准备路由
        var router=new VueRouter();
    
        //4. 关联
        router.map({
            'home':{
                component:Home
            },
            'news':{
                component:News
            }
        });
    
        //5. 启动路由
        router.start(App,'#box');
    
    跳转:
        router.redirect({
            ‘/’:'/home'
        });
    --------------------------------------
    路由嵌套(多层路由):
        
        主页    home
                登录    home/login
                注册    home/reg
        新闻页   news
    
        subRoutes:{
            'login':{
                component:{
                    template:'<strong>我是登录信息</strong>'
                }
            },
            'reg':{
                component:{
                    template:'<strong>我是注册信息</strong>'
                }
            }
        }
    路由其他信息:
        /detail/:id/age/:age
        {{$route.params | json}}    ->  当前参数
        {{$route.path}}             ->  当前路径 
        {{$route.query | json}}     ->  数据

    27、Vue加载器

    
    
     如果vue加载vue文件
     引入:vue-loader
    vue-loader:
        其他loader ->  css-loader、url-loader、html-loader.....
        后台: nodeJs    ->  require  exports
        broserify  模块加载,只能加载js
        webpack   模块加载器, 一切东西都是模块, 最后打包到一块了
        require('style.css');    ->   css-loader、style-loader    
        vue-loader基于webpack

    28、.Vue文件

            放置的是vue组件代码
            <template>
                html
            </template>
        
            <style>
                css
            </style>
        
            <script>
                js    (平时代码、ES6)    babel-loader
            </script>

    29、Vue项目简单的目录结构

    	|-index.html
    	|-main.js	入口文件
    	|-App.vue	vue文件,官方推荐命名法
    	|-package.json	工程文件(项目依赖、名称、配置)
    		npm init --yes 生成
    	|-webpack.config.js	webpack配置文件
    

    30、Vue中ES6模块化开发

        导出模块:
            export default {}
        引入模块:
            import 模块名 from 地址

     31、Vue脚手架

    vue-cli——vue脚手架
         帮你提供好基本项目结构
    
    本身集成很多项目模板:
        simple     个人觉得一点用都没有
        webpack    可以使用(大型项目)
                   Eslint 检查代码规范,
                   单元测试
        webpack-simple    个人推荐使用, 没有代码检查    √
      
    基本使用流程:
    1. npm install vue-cli -g    安装 vue命令环境
        验证安装ok?
            vue --version
    2. 生成项目模板
        vue init <模板名> 本地文件夹名称
    3. 进入到生成目录里面
        cd xxx
        npm install
    4. npm run dev
  • 相关阅读:
    mac 配置 iterm2
    python面试题
    待办事项--flask
    八皇后问题c语言版(xcode下通过)
    对分布式一些理解
    观察者模式
    用redis实现悲观锁(后端语言以php为例)
    只用200行Go代码写一个自己的区块链!(转)
    php的生命周期的概述
    linux网络编程1 最简单的socket编程
  • 原文地址:https://www.cnblogs.com/chenyablog/p/6761866.html
Copyright © 2011-2022 走看看