Vue 相关指令、方法

作者: GA_ | 来源:发表于2019-03-18 16:27 被阅读0次

    标签中指令

    • v-text
    展示data中定义字段的内容
    <p v-text="data中定义的字段"></p>
    <div v-text="data中定义的字段"></div>
    
    • @click
    给标签加点击事件
    <button @click="setData1">clicked setData</button>
    <div @click="setData1">clicked setData</div>
    
    • v-if v-else v-for
            <ul v-if="models.length">
                <li v-for="model in models">{{ model.name }}</li>
            </ul>
            <p v-else>v-else</p>
    

    全局方法

    • Vue.set

      官方: 34EACC3E-E17A-42F6-B7AA-D7F78E1D1DF7.png

    官方 深入响应式原理 链接
    注意target 是一个数组
    更新列表处使用

    1、data()中定义参数setData

    setData: ["setData", "2", "3”]
    

    2、更改setData的方法中使用如下

    // 001
    Vue.set(this.setData,0,'seted Data’)
    // 002
    this.$set
    
    • Vue.delete
    Vue.set是设置新值,delete是删除值
    
    Vue.delete(this.setData, 0)
    
    • Vue.extend
    详见另一篇 Vue全局组件和局部组件
    
    • Vue.nextTick
    官方解释:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
    自己理解:更新UI完成之后,异步知道UI更新完了
                // 001写法
                updateMessage: function() {
                    this.message = '更新完成'
                    console.log(this.$el.textContent) // => '没有更新'
                    // 局部 闭包写法
                    this.$nextTick(function() {
                        // 控件更新完成 进行异步回调
                        console.log(this.$el.textContent) // => '更新完成'
                    })
                },
                // 002写法
                updateMessage: asyncfunction() {
                    this.message = '更新完成'
                    console.log(this.$el.textContent) // => '没有更新'
                    // 局部 新写法
                    await this.$nextTick()
                    console.log(this.$el.textContent) // => '已更新'
                }
    
    • Vue.directive
    自定义全局指令、自定义局部指令
    [官网自定义指令链接](https://cn.vuejs.org/v2/guide/custom-directive.html)
    <input type="text" v-focus>
    focus是自定义的指令名称
        directives: {
                focus: {
                    // 钩子函数bind 只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置
                    bind: function(el, binding, vnode, oldVnode) {
                        console.log("focus-bind");
                        console.log(el);
                        console.log(binding);
                        console.log(vnode);
                        console.log(oldVnode);
                        console.log(el.focus());
                        // el.autofocus();
                        el.focus();
                    },
                    // 所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
                    update: function(el) {
                        console.log("focus-update");
                        console.log(el);
                        console.log(el.focus());
                        // el.autofocus();
                        el.focus();
                    },
                    // 被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)
                    inserted: function(el) {
                        console.log("focus-inserted");
                        console.log(el);
                        console.log(el.focus());
                        // el.autofocus();
                        el.focus();
                    },
                    // 指令所在组件的 VNode 及其子 VNode 全部更新后调用。
                    componentUpdated: function(el) {
                        console.log("focus-inserted");
                        console.log(el);
                        console.log(el.focus());
                        // el.autofocus();
                        el.focus();
                    },
                    // 只调用一次,指令与元素解绑时调用。
                    unbind: function(el) {
                        console.log("focus-inserted");
                        console.log(el);
                        console.log(el.focus());
                        // el.autofocus();
                       el.focus();
                    }
                }
            }
    

    全局自定义指令

            Vue.directive('focus', {
                inserted: function(el) {
                    el.focus()
                }
            })
    
    • Vue.filter

    过滤器

    全局过滤器
        Vue.filter('globalFilter', function(value) {
            return value + "!!!"
        })
        Vue.filter('filterLowWords', function(value) {
            return value.toString().toLowerCase()
        })
    
    局部过滤器
            filters: {
                filterUpWords: function(value) {
                    return value.toString().toUpperCase()
                }
            }
    

    使用:

    <div>{{ message | globalFilter| filterLowWordsa | filterUpWords}}</div>
    
    • Vue.Component
    1、查看Vue全局组件和局部组件
    
    2、Vue 父组件和子组件之间那点儿破事儿
    
    • Vue.Use()
    Vue.use(VueRouter)
    var VueTouch = require('vue-touch')
    Vue.use(VueTouch)
    
    • Vue.mixin
    官方描述:混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。
    

    1、mixin.js文件

    export const mixin = {
        created: function () {
                console.log('我是mixin中created方法')
        },
        methods: {
            star(){
                console.log('我是mixin中 star');
            },
            config(){
                console.log('我是mixin中 config');
            }
        }
    }
    

    2、组件中

    import {
            mixin
        } from "../js/mixin.js";
        export default {
            el: 'vue_global_api',
            mixins: [mixin],
            created() {
                console.log('我是组件的created');
                this.star();
                this.config();
            },
            methods: {
                config() {
                    console.log('我是组件中methods的created');
            },
        }
    

    3、打印:

    我是mixin中created方法
    我是组件的created
    我是mixin中 star
    我是组件中methods的created     // 覆盖了mixin中的config方法
    

    4、以下是全局混入

    Vue.mixin({
      created() {
      }
    })
    

    5、最后

    有更高级的混入...
    
    • Vue.compile 渲染
    [以下代码来自官网](https://cn.vuejs.org/v2/guide/render-function.html)
    // @returns {VNode}
    createElement(
      // {String | Object | Function}
      // 一个 HTML 标签字符串,组件选项对象,或者
      // 解析上述任何一种的一个 async 异步函数。必需参数。
      'div',
      // {Object}
      // 一个包含模板相关属性的数据对象
      // 你可以在 template 中使用这些特性。可选参数。
      {
        // (详情见下一节)
      },
      // {String | Array}
      // 子虚拟节点 (VNodes),由 `createElement()` 构建而成,
      // 也可以使用字符串来生成“文本虚拟节点”。可选参数。
      [
        '先写一些文字',
        createElement('h1', '一则头条'),
        createElement(MyComponent, {
          props: {
            someProp: 'foobar'
          }
        })
      ]
    )
    {
        // 和`v-bind:class`一样的 API
      // 接收一个字符串、对象或字符串和对象组成的数组
      'class': {
        foo: true,
        bar: false
      },
      // 和`v-bind:style`一样的 API
      // 接收一个字符串、对象或对象组成的数组
      style: {
        color: 'red',
        fontSize: '14px'
      },
      // 普通的 HTML 特性
      attrs: {
        id: 'foo'
      },
      // 组件 props
      props: {
        myProp: 'bar'
      },
      // DOM 属性
      domProps: {
        innerHTML: 'baz'
      },
      // 事件监听器基于 `on`
      // 所以不再支持如 `v-on:keyup.enter` 修饰器
      // 需要手动匹配 keyCode。
      on: {
        click: this.clickHandler
      },
      // 仅用于组件,用于监听原生事件,而不是组件内部使用
      // `vm.$emit` 触发的事件。
      nativeOn: {
        click: this.nativeClickHandler
      },
      // 自定义指令。注意,你无法对 `binding` 中的 `oldValue`
      // 赋值,因为 Vue 已经自动为你进行了同步。
      directives: [
        {
          name: 'my-custom-directive',
          value: '2',
          expression: '1 + 1',
          arg: 'foo',
          modifiers: {
            bar: true
          }
        }
      ],
      // 作用域插槽格式
      // { name: props => VNode | Array<VNode> }
      scopedSlots: {
        default: props => createElement('span', props.text)
      },
      // 如果组件是其他组件的子组件,需为插槽指定名称
      slot: 'name-of-slot',
      // 其他特殊顶层属性
      key: 'myKey',
      ref: 'myRef',
      // 如果你在渲染函数中向多个元素都应用了相同的 ref 名,
      // 那么 `$refs.myRef` 会变成一个数组。
      refInFor: true
    }
    
    • Vue.version 查看Vue版本号
    var version = Number(Vue.version.split('.')[0])
    if (version === 2) {
      // Vue v2.x.x
    } else if (version === 1) {
      // Vue v1.x.x
    } else {
      // Unsupported versions of Vue
    }
    

    相关文章

      网友评论

        本文标题:Vue 相关指令、方法

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