Vue | 20 可复用性组合-混入

news/2024/7/10 2:38:37 标签: vue, frontend technology, framwork

内容提要:

  1. 基础的混入方式
  2. 操作项的合并
  3. 全局的混入方式
  4. 自定义操作项合并策略

混入是一种非常灵活的分发Vue组件中可复用的功能模块的方式。一个混入对象能包含任何组件操作项。当一个组件使用一个混入对象的时候,在混入对象的所有操作项被‘混合’进组件自己的操作项。

例如:

// 定义一个混入对象
var myMixin = {
    created: function () {
        this.hello()
    },
    methods: {
        hello: function () {
            console.ljog('hello form mixin!')
        }
    }
}

// 定义一个组件使用这个混入
var Component = Vue.extend({
    mixins: [myMixin]
})

var component = new Component() // => "hello from mixin!"

操作项合并

当一个混入和组件本身包含重叠的操作项,它们将被使用恰当的策略合并。

例如,数据对象进行一个浅合并(一层属性深度),在发生冲突时组件的数据优先。

var mixin = {
	data: function () {
        return {
			message: 'hello',
			foo: 'abc'
		}
	}
}

new Vue({
    mixins: [mixin],
    data: function () {
        return {
			message: 'goodbye',
            bar: 'def'
        }
	},
    created: function () {
        console.log(this.$data)
        // => { message: "goodbye, foo: "abc", bar: "def" }
    }
})

相同命名的钩子函数被合并到数组以便调用所有这些函数。在组件自己的钩子被调用之前混入钩子将被调用。

var mixin = {
	created: function () {
		console.log('mixin hook called')
    }
}

new Vue({
    mixins: [mixin],
    created: function () {
		console.log('component hook called')
    }
})

// => "mixin hook called"
// => 'component hook called'

值为对象的选项,例如:methodscomponentsdirecitives,将被合并到同一个对象。在这些对象中,当keys冲突的时候组件选项具有更高的优先级:

var mixin = {
	methods:{
    foo: function () {
        console.log('foo')
    },
    conflicting: function () {
		console.log ('from mixin')
    }
  }
}

var vm = new Vue({
    minins: [mixin],
    methods: {
		bar: function () {
			console.log('bar')
        },
        conflicting: function () {
			console.log('from self')
        }
    }
})

vm.foo() // => "foo"
vm.bar() // => "bar" 
vm.conflicting() // => "form self"

Vue.extend()使用相同的合并策略。

全局混入

你也能够使用一个全局混入,谨慎使用!一旦你使用了一个全局混入,它将影响你之前创建的每一个Vue实例。当使用得当的时候,它可以被用于注入自定义操作的处理逻辑:

// 为‘myOption’自定义操作输入一个处理程序
Vue.mixin({
    created: function () {
        var myOption = this.$options.myOption
        if (myOption) {
            console.log(myOption)
        }
    }
})

new Vue({
    myOption: 'hello!'
})
// => hello!

要节制和小心使用全局混入,因为它会影响你每一个单独创建的Vue实例,包括第三方组件。大多数情况下,你应该像上文的例子一样仅仅在自定义的操作中使用。也可以作为Plugins以避免重复应用。

自定义操作项合并策略

当自定义操作项被合并的时候,他们使用默认的策略复写已经存在的值。如果你想让一个自定义的操作项使用一个自定义的逻辑被合并,你需要附加一个函数Vue.config.optionMergeStrategies:

Vue.config.optionMergeStrategies.myOption = function (toVal, formVal) {
    // 返回合并后的值
}

对于大部分基于对象的操作,你能够通过methods使用相同的策略:

var strategies = Vue.config.optionMergeStrategies
strategies.myOption = stategies.methods

一个更高级的合并策略例子能够被发现在 Vuex‘s 1.x:

const merge = Vue.config.optionMergeStrategies.computed
Vue.config.optionMergeStrategies.vuex = function (toVal, formVal) {
    if (!toVal) return fromVal
    if (!formVal) return toVal
    return {
        getters: merge(toVal.getters, formVal.getters),
        state: merge(toVal,state, fromVal.state),
        actions: merge(toVal,actions, fromValue.actions)
    }
}

http://www.niftyadmin.cn/n/1035762.html

相关文章

windows10 Vscode+CMake+GCC/G++ 配置

目录一.安装软件二.配置Vscode三.配置完成后创建工程:一.安装软件 1.安装Vscode 支持跨平台,微软产品. 下载地址:https://code.visualstudio.com/ vscode所需插件 C/C C Intellisense CMake CMake tools CMake Tools Helper安装勾选需要的…

Vue | 21 可复用性组合-自定义指令

内容提要: 自定义指令基本用法介绍自定义指令内部包含哪些钩子函数指令钩子内部传递哪些元素值自定义指令函数的缩略写法用例在JavaScript对象中传递多个字面值 介绍 除了在核心附带的默认的指令集合(v-model和v-show)外,Vue也允…

ubuntu adb shell 配置

为了确保电脑可以烧写设备,首先需要在/etc/udev/rules.d/51-android.rules文件中增加以下命令: SUBSYSTEM"usb", ATTR{idVendor}"0e8d", ATTR{idProduct}"201c", MODE"0666",GROUP"plugdev"SUBSYSTEM…

15.【Linux】ubuntu 安装微信

目录1.下载deepin-wine2.下载deepin.com.wechat_2.6.8.65deepin0_i386.deb1.下载deepin-wine https://github.com/wszqkzqk/deepin-wine-ubuntu 点击 deepin-wine-ubuntu-v2.18-12-ubuntu2.tar.gz进行下载 下载下来后单独建立一个文件夹进行解压 mkdir deepin tar -xvf dee…

Vue | 22 可复用性组合-渲染函数 JSX

内容提要: 渲染函数基本用法节点、树和虚拟DOMcreateElement参数详解使用普通的JavaScript代替模板特性JSX插件介绍函数式组件的用法:传递属性和事件给子元素或子组件,slots() vs children模板编译的demo演示 基础 在大部分情况下我们推荐使…

SAP Validation和Substitution

先来看看Validation的简单应用:当用户LI_J输入Item金额大于10000时,系统提示Error信息。1.1.新建Validation(T-code:GGB0)如图1-1:[1].选择只在凭证头BKPF回车或保存时触发凭证的有效性检查。[2].选择凭证头BKPF或行项目BSEG做先决条件&#…

Vue | 23 可用性组合 - 插件

内容提要: 使用一个插件如何写一个插件 插件常常为Vue添加全局级功能。插件没有严格定义的作用域 - 通常有几种类型的插件: 添加一些全局的方法或属性。例如: vue-custom-element添加一个或多个全局资源:指令/过滤器/过渡 等等. …

Linux Vscode+CMake+GCC/G++/Java 环境配置

目录一.C 配置环境二.Java 环境配置2.1 安装JDK在线安装离线安装2.2配置vscode在线配置离线配置一.C 配置环境 C 配置采用cmake g/gcc 方式 gcc/g 安装 sudo apt-get install gcc gcmake 安装 1.下载: https://cmake.org/download/ 网盘cmake1.9 https://share.…