• Vue指令、组件


    1.指令
    v-cloak 解决插值闪烁问题

    v-bind 绑定属性,简写':'

    v-on 绑定事件,简写'@'

    v-show 让这个元素显示隐藏(需要来回切换用)

    v-if 每次都会删除创建节点(不需要来回切换用)

    v-for 循环,加 :key="index"属性,提高循环性能

    v-text 相当于之前的innerText

    v-html 相当于之前的innerHTML

    v-model 双向数据绑定,适用于表单元素

    2.自定义指令

    Ⅰ、全局指令(directive )

    注册全局指令 v-focus, 让他在页面加载时,元素获得焦点:

    <div id="app">
        <input type="text" v-focus>
    </div>
    <script src="lib/vue-2.4.0.js"></script>
    <script>
    Vue.directive('focus', {    
        inserted: function (el) {
            el.focus()
        }
    })
    // 创建根实例
    new Vue({
        el: '#app'
    })
    </script>

    Ⅱ、局部指令(directives )

    指令定义函数提供的钩子函数有bind、inserted、update、componentUpdated、unbind

    钩子函数的参数有el、binding、vnode、oldVnode

    其中,binding包含的属性有name、value、oldValue、expression、arg、modifiers

    举例:注册局部的自定义指令 v-focus,让他在页面加载时,元素获得焦点:

    <div id="app">
      <input type="text" v-focus>
    </div>
    <script src="lib/vue-2.4.0.js"></script>
    <script>
    // 创建根实例
    new Vue({
        el: '#app',
        directives: {
            focus: {
                //指令定义函数提供的钩子函数(可选):
                inserted: function (el) {//inserted被绑定元素插入父节点时调用
                    el.focus()
                    //el:指令所绑定的元素
                    //binding:一个对象,包含以下属性:
                        //binding.name:指令名,不包括 v- 前缀。
                        //value:指令的绑定值,例如:v-my-directive="1 + 1" 中,绑定值为 2。
                        //oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
                        //expression:字符串形式的指令表达式。例如 v-my-directive="1 + 1" 中,表达式为 "1 + 1"。
                        //arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 "foo"。
                        //modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。
                    //vnode:Vue 编译生成的虚拟节点
                    //oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。
                },
                //bind: 只调用一次,指令第一次绑定到元素时调用
                //update: 被绑定元素所在的模板更新时调用
                //componentUpdated: 被绑定元素所在模板完成一次更新周期时调用
                //unbind: 只调用一次, 指令与元素解绑时调用。
                
            }
        }
    })
    </script>

    3.组件

    组件分为全局的组件和局部组件

    一:全局组件(component)

    定义全局组件 第一个参数是组件的名称,第二个参数是组件的配置项

    <div id="app">
        <com1></com1>  
    </div>
    <script src="lib/vue-2.4.0.js"></script>
    <script type="text/javascript">
        Vue.component("com1",Vue.extend({
            template:"<h3>组件模板</h3>"
        }))
    
        var vm = new Vue({
            el: "#app",
        })
        //简写1 省略Vue.extend
        //Vue.component("com1", {
            //template: "<h3>组件模板1</h3>"
        //})
    </script> 

    简写2:

    <div id="app">
         <com-name></com-name><!-- 他的组件名为comName -->
     </div>
    <template id="com2"><!-- template模板里的内容定义在template标签里,给这个template一个id -->
         <div><!-- 模板中如果有多个标签的时候 必须要有一个根元素 -->
             <h2>{{msg}}</h2>
             <button v-on:click="getMsg">获取msg</button>
         </div>
     </template>
     <script src="../lib/vue-2.4.0.js"></script>
     <script type="text/javascript">
        Vue.component("comName", {
            // 组件的名字如果是一个驼峰值的写法,
            //那么在html里调用的时候要写成-的写法
            template: "#com2",
            //在组件中同样可以定义data和methods
            //data写法data: function () {return {}} 
            //因为这个组件可能会被调用多次,这样的话保证每一次调用的组件都有属于自己的数据
            data: function () {//data必须要定义成一个function
                return {//return一个json
                    msg: "组件里的data---msg"
                }
            },
            methods: {
                getMsg() {
                    console.log(this.msg)
                }
            }
        })
        var vm = new Vue({
            el: "#app",
        })
     </script>

    二、局部组件(components)

    局部组件写法:

    <div id="app2">
        <count-num></count-num>
    </div>
    <template id="count">
        <div>
            <p>{{num}}</p>
            <button type="button" @click="countUp">++</button>
        </div>
    </template>
    <script src="lib/vue-2.4.0.js"></script>
    <script type="text/javascript">
        //局部写法
        var vm = new Vue({
            el: "#app2",
            data: {
                num: 0
            },
            components: {
                countNum:{
                    template:"#count",
                    data(){
                        return {
                            num:0
                        };
                    },
                    methods:{
                        countUp(){
                            this.num++
                        }
                    }
                }
                
            }
        })
    </script>



  • 相关阅读:
    linux平台下Hadoop下载、安装、配置
    C#实现单例,保证线程安全
    编写response生成图片验证码时,报import com.sun.image.codec.jpeg.JPEGCodec;
    Java中static是什么意思,有什么作用?
    使用内部类和闭包
    在数据结构中存储对象
    Java学习——响应用户输入
    提升代码质量——结构化编程
    各种排序总结(六)归并排序
    各种排序总结(五)快速排序
  • 原文地址:https://www.cnblogs.com/zhd09/p/11730931.html
Copyright © 2020-2023  润新知