Vue2.0变化(1)

作者: coolheadedY | 来源:发表于2017-01-31 18:50 被阅读24次

此文章只做vue特性记录,方便与API索引学习

组件component

  • 组件模板template内不能直接放多标签的片段代码,必须要有个元素包裹所有的元素
<template id='id'>
  <div>//必须有的包裹元素
    //other html...
  </div>
</template>
  • 组件定义Vue.extend定义方式改变,不推荐继续使用
    1.0此方法继续可用:
Vue.component('compt-name', {
    data(){},
    methods:{},
    template:
})

2.0简介用法: (全局)

<template id='id'>
  <div>//必须有的包裹元素
    //other html...
  </div>
</template>
var Comp = {
    template: '#id'
}
new Vue({
    el: '#box',
    data: {},
})
Vue.component('my-comp', Comp);
<div id='box'>
    <my-comp></my-comp>
</div>

2.0简介用法: (局部)

var Comp = {
    template: '#id'
}
new Vue({
    el: '#box',
    data: {},
    components: {
        'my-comp': Comp
    }
})

生命周期

new Vue({
    el: '#id',
    data: {},
    beforeCreate(){ console.log('实例刚创建但是没data') },
    created(){ console.log('实例创建有data,DOM未创建') },
    beforeMount(){ console.log('模板编译(挂载)之前') },
    mounted(){ console.log(''模板编译(挂载)完成) },//同1.0ready()
     //组件更新的生命周期在执行方法更新数据时执行
    beforeUpdate(){ console.log('组件更新之前') },
    updated(){ console.log('组件更新完毕') }
    //组件 销毁
    beforeDestroy(){},
    destroyed(){}
})

v-for循环

<ul>
    <li v-for='(val, idx) in arr'>{{val}}, {{idx}}</li>
</ul>
<ul>
    <li v-for='(val, key) in json'>{{val}}, {{key}}</li>
</ul>

键盘指令

Vue.config.keyCodes.ctrl = 17;
<input type='text' @keyup.ctrl="fn()">

过滤器

  • 内置过滤器全部删除,推荐lodash工具库+自己封装实现
Vue.filter('todo', function(in, a, b) {
    return in + 'out';
})
<div>{{msg | todo('1', '2')}}</div>

组件的通信

  • 子组件取父组件数据仍然使用props,但是2.0禁止原先子组件修改父组件的数据的方式,2.0在此做了限制。
data:{ obj: {a:'1', b:'2'} }//父组件传给子组件数据必须是对象
props:['myData']//子组件定义myData取得父组件data中的obj对象数据
<child :myData="obj"></child>//子组件模板使用props来的父组件数据
this.myData.a = '10'//子组件可以修改myData.a来同步修改父组件obj.a的数据,修改了子组件的this.myData.a也同时修改了父组件myData.a的数据
  • 单一事件管理组件通信 vuex原理
    • 定义一个事件中心var Event = new Vue()
      发送数据的组件Event.$emit(‘event name’, data);
      接受数据的组件Event.$on('event name', function(data){}).bind(this)
      范例
    <script>
        //准备一个空的实例对象
        var Event=new Vue();

        var A={
            template:`
                <div>
                    <span>我是A组件</span> -> {{a}}
                    <input type="button" value="把A数据给C" @click="send">
                </div>
            `,
            methods:{
                send(){
                    Event.$emit('a-msg',this.a);
                }
            },
            data(){
                return {
                    a:'我是a数据'
                }
            }
        };
        var B={
            template:`
                <div>
                    <span>我是B组件</span> -> {{a}}
                    <input type="button" value="把B数据给C" @click="send">
                </div>
            `,
            methods:{
                send(){
                    Event.$emit('b-msg',this.a);
                }
            },
            data(){
                return {
                    a:'我是b数据'
                }
            }
        };
        var C={
            template:`
                <div>
                    <h3>我是C组件</h3>
                    <span>接收过来的A的数据为: {{a}}</span>
                    <br>
                    <span>接收过来的B的数据为: {{b}}</span>
                </div>
            `,
            data(){
                return {
                    a:'',
                    b:''
                }
            },
            mounted(){
                //var _this=this;
                //接收A组件的数据
                Event.$on('a-msg',function(a){
                    this.a=a;
                }.bind(this));

                //接收B组件的数据
                Event.$on('b-msg',function(a){
                    this.b=a;
                }.bind(this));
            }
        };
        window.onload=function(){
            new Vue({
                el:'#box',
                components:{
                    'com-a':A,
                    'com-b':B,
                    'com-c':C
                }
            });
        };
    </script>
</head>
<body>
    <div id="box">
        <com-a></com-a>
        <com-b></com-b>
        <com-c></com-c>
    </div>
</body>

相关文章

  • Vue2.0变化(1)

    此文章只做vue特性记录,方便与API索引学习 组件component 组件模板template内不能直接放多标签...

  • vue-cli3项目结构及配置

    1.项目结构 精简了很多,但还是和vue2.0有很多区别的,基本的用法变化不是特别大 ① vuex(状态管理): ...

  • vue2.0新变化

    http://www.cnblogs.com/beidan/p/vue.html 一些问题的总结如:2.判断是否登...

  • Vue2.0变化(2)

    Vue动画 2.0动画定义的几个class1.name-enter{} 动画开始的初始状态2.name-enter...

  • Vue2.0 环境搭建到运行

    Vue2.0 从环境搭建到发布 1 Vue2.0 推荐开发环境 1.1 Node.js 1.1.1 Node.js...

  • 封装常用的过滤器

    关键词:vue 过滤器 vue2.0已经发布了,虽不说像angular2那样变化巨大,却增删了不少东西,其中在1....

  • Vue2.0-Vue3.0语法差异性总结

    Vue2.0 Vue2.0实例 Vue2.0 组件 使用组件的细节 在 ttable > tbody > tr 使...

  • vue2.0和1.0的区别

    vue2.0跟1.0差别:(总体变化不大) 1.关于过滤器: 2.0移除了自带过滤器,但是保留了自定义过滤器的功能...

  • Vue2.0的哪些变化

    vue2.0: bower info vue http://vuejs.org/ 到了2.0以后,有哪...

  • vue2.0的数组劫持

    Object.defineProperty不支持监听数组变化。所以需要重写数组上面的方法。 vue2.0对数组的方...

网友评论

    本文标题:Vue2.0变化(1)

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