Vue.extend( options )

extend创建的是一个组件构造器,而不是一个具体的组件实例

//选项对象 baseOptions
let baseOptions= {
template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>',
data: function () {
return {
firstName: 'Walter',
lastName: 'White',
alias: 'Heisenberg'
}
},
created(){
console.log('onCreated-1');
}
};

使用:

1、extend常服务于Vue.component用来生成组件,这是注册全局组件,可以在任意实例的components里使用。

使用示例:全局提示组件全局的网页底部动态创建全局组件(插件 )用Vue.extend构建消息提示组件。(网页底部组件:创建的组件的dom结构,直接在body底部插入,在vue的app实例范围外,创建之后,该组件仍然可以响应组件内的数据。)

Vue.component('global-component', Vue.extend(baseOptions));
//传入一个选项对象(自动调用 Vue.extend),等价于上行代码.
Vue.component('global-component', baseOptions);

2、Vue.extend只是创建一个构造器,他是为了创建可复用的组件,在其它地方可以直接new。而mixins,extends是为了扩展组件属性,采用的方式是混合选项对象baseOptions

let BaseComponent = Vue.extend(baseOptions);
//基于基础组件BaseComponent,再扩展新逻辑.
new BaseComponent({
created(){
//do something
console.log('onCreated-2');
}
//其他自定义逻辑
});
// -> onCreated-1
// -> onCreated-2

它的混入规则,和mixins一样。详细查阅vue实例属性总结:根实例和组件实例

new Vue({
mixins: [baseOptions],
created(){
//do something
console.log('onCreated-2');
}
//其他自定义逻辑
});
// -> onCreated-1
// -> onCreated-2

extends:声明扩展另一个组件(可以是一个简单的选项对象或构造函数)。这主要是为了便于扩展单文件组件,与mixins 类似,剩下的差别大概是mixins接受数组,它是选项对象。

new Vue({
extends: baseOptions,
created(){
//do something
console.log('onCreated-2');
}
//其他自定义逻辑
});
// -> onCreated-1
// -> onCreated-2

3、创建一个vue的“子类”,使用new extend的构造函数,注册局部组件(局部组件也可以是单文件组件,使用导入的方式注册),局部组件在子组件中不可用。参数与Vue一样,注意:data选项是函数,没有el等实例才有的选项。new的实例使用的propsData,而不是props。

var author = Vue.extend({
template: "<p><a :href='url'>{{author}} & {{name}}</a></p>",
data : function() {
return {
author : 'vamous',
url : 'http://blog.csdn.net/Dear_Mr/article/details/72614370'
}
},
  props : ['name']
});
//对应html:自定义无参数标签
<author></author>
//必须要挂载才可以使用
//使用propsData给实例的props传递参数
new author({propsData: {name : 'dear_mr'}}).$mount('author'); //对应html还可以是普通标签
<div id="author"></div>
//挂载方式
new author().$mount('#author');

extend写法不但要创建构造器,还要new一个实例,还要挂载到特定的元素上,这个特定元素最终还被完全替换了,不像component用起来那么舒服,注册好特定的名字之后,想在哪里用,就在哪里写组件名,程序还更易读。

所以说extend到底有什么优势呢?

生成的实例并不一定要"挂载到一个元素上"。

也就是 new 实例().$mount() 的参数可以为空,但他依旧能生成一个实例。生成的实例里面有$el这个参数,通过document.body.appendChild( 实例.$el),这个dom想插哪里插哪里。

component是extend的亲民版,但在实现某些特殊需求的时候,就需要用到extend,如alert组件,你肯定希望alert可以动态插入到body中,而不需要在dom文档流中放一个莫名其妙的alert,大部分时间他还是隐藏的。

Vue.nextTick( [callback, context] ):从2.1起,返回一个promise。在下次 DOM 更新循环结束之后(这是个什么场景?)执行延迟回调(这个回调在哪里传入?)。在修改数据之后立即使用这个方法,获取更新后的 DOM(获取拿来干嘛?)。

Vue.set( target, key, value ):向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。注意对象不能是 Vue 实例,或者 Vue 实例的根数据对象。

在实例上的调用形式:vm.$set

使用场景:

1、vm实例创建后新添属性。

2、Vue 不能检测以下变动的数组(vue能检测到并触发视图更新的方法):

  a、当利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue  

  解决:

  (1)Vue.set(vm.items, indexOfItem, newValue)

  (2)vm.items.splice(indexOfItem, 1, newValue)

  (3)vm.$set(vm.items, indexOfItem, newValue)

  b、当修改数组的长度时,例如:vm.items.length = newLength

解决:vm.items.splice(newLength)

Vue.delete( target, key ):删除对象的属性。如果对象是响应式的,确保删除能触发更新视图。这个方法主要用于避开 Vue 不能检测到属性被删除(这句话什么意思?),但是你应该很少会使用它。目标对象不能是一个 Vue 实例或 Vue 实例的根数据对象。

Vue.directive( id, [definition] ):注册或获取全局指令,见自定义指令

//返回已注册的指令
var myDirective = Vue.directive('my-directive')

Vue.filter( id, [definition] ):注册或获取全局过滤器,查看博文vue构造器参数之filters过滤器

Vue.component( id, [definition] ):注册或获取全局组件,Vue.component类是Vue类的子类,第一个参数是组件名称,建议使用小写+‘-’的形式,在使用时,也是这个形式。

// 注册组件,传入一个扩展过的构造器
Vue.component('my-component', Vue.extend({ /* ... */ })) // 注册组件,传入一个选项对象 (自动调用 Vue.extend),等价于上行代码.
Vue.component('my-component', { /* ... */ }) // 获取注册的组件 (始终返回构造器)
var MyComponent = Vue.component('my-component')

基础组件的自动化全局注册:解决每个文件一长串的import基础组件

import BaseButton from './BaseButton.vue'
import BaseIcon from './BaseIcon.vue'
import BaseInput from './BaseInput.vue'

自动注册,在new根实例之前:

使用 require.context 全局注册通用的基础组件。这里有一份可以让你在应用入口文件 (比如 src/main.js) 中全局导入基础组件的示例代码:

import Vue from 'vue'
import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase' const requireComponent = require.context(
// 其组件目录的相对路径
'./components',
// 是否查询其子目录
false,
// 匹配基础组件文件名的正则表达式
/Base[A-Z]\w+\.(vue|js)$/
) requireComponent.keys().forEach(fileName => {
// 获取组件配置
const componentConfig = requireComponent(fileName) // 获取组件的 PascalCase 命名
const componentName = upperFirst(
camelCase(
// 剥去文件名开头的 `./` 和结尾的扩展名
fileName.replace(/^\.\/(.*)\.\w+$/, '$1')
)
) // 全局注册组件
Vue.component(
componentName,
// 如果这个组件选项是通过 `export default` 导出的,
// 那么就会优先使用 `.default`,
// 否则回退到使用模块的根。
componentConfig.default || componentConfig
)
})

Vue.use( plugin ):安装 Vue.js 插件,包括个人组件/插件。该方法需要在调用 new Vue() 之前被调用。

Vue.js 官方提供的一些插件 (例如 vue-router) 在检测到 Vue 是可访问的全局变量时会自动调用 Vue.use()。然而在例如 CommonJS 的模块环境中,要显式地调用 Vue.use()

Vue.compile( template ):编译的意思,在 render 函数(渲染函数)中编译模板字符串。只在独立构建时有效。

var res = Vue.compile('<div><span>{{ msg }}</span></div>')

new Vue({
data: {
msg: 'hello'
},
render: res.render,
staticRenderFns: res.staticRenderFns
})

Vue.observable( object ):返回的对象可以直接用于渲染函数计算属性内,并且会在发生改变时触发相应的更新。

在 Vue 3.x 中,返回一个可响应的代理,而对源对象直接进行修改仍然是不可响应的。因此,推荐操作返回的对象,而不是源对象。

全局API的更多相关文章

  1. vuejs全局api

    全局api set 增加数组 vm.$set 实例化方法 全局api delete 删除数组 vm.$delete 实例化方法 全局 api 组件component 实例化方法 components ...

  2. AngularJS学习之全局API(应用程序编程接口)

    1.AngularJS全局API用于执行常见任务的Javascript函数集合: **比较对象 **迭代对象 **转换对象 2.全局API函数使用angularJS对象进行访问:以下是通用API函数: ...

  3. Vue基础(环境配置、内部指令、全局API、选项、内置组件)

    1.环境配置 安装VsCode 安装包管理工具:直接下载 NodeJS 进行安装即可,NodeJS自带 Npm 包管理工具,下载地址:https://nodejs.org/en/download/安装 ...

  4. vue文档全局api笔记1

    全局api方法 1.Vue.extend(options) 请注意,extend创建的是一个组件构造器,而不是一个具体的组件实例.所以他不能直接在new Vue中这样使用: new Vue({comp ...

  5. vuejs全局api概念

    什么是全局API? 全局API并不在构造器里,而是先声明全局变量或者直接在Vue上定义一些新功能,Vue内置了一些全局API,比如我们今天要学习的指令Vue.directive.说的简单些就是,在构造 ...

  6. API(全局配置,全局API)

    全局配置 Vue.config是一个对象,包含Vue的全局配置 silent 类型:boolean 默认值:false 用法 Vue.config.silent=true 取消Vue所有的日志与警告 ...

  7. Vue源码探究-全局API

    Vue源码探究-全局API 本篇代码位于vue/src/core/global-api/ Vue暴露了一些全局API来强化功能开发,API的使用示例官网上都有说明,无需多言.这里主要来看一下全局API ...

  8. Vue 2.0入门基础知识之全局API

    3.全局API 3-1. Vue.directive 自定义指令 Vue.directive用于自定义全局的指令 实例如下: <body> <div id="app&quo ...

  9. vue API 知识点(1)---全局 API 总结

    1.Vue.extend(options) 构造器,创建一个 子类 .参数是一个包含组件选项的对象 data 选项是特例,需要注意 在 Vue.extend() 中它必须是一个函数, <div ...

  10. Vue3全局APi解析-源码学习

    本文章共5314字,预计阅读时间5-15分钟. 前言 不知不觉Vue-next的版本已经来到了3.1.2,最近对照着源码学习Vue3的全局Api,边学习边整理了下来,希望可以和大家一起进步. 我们以官 ...

随机推荐

  1. 015_python原生在线调试工具

    一.pdb https://docs.python.org/3/library/pdb.html

  2. Redis报错 Server started, Redis version 3.2.13 Can't handle RDB format version 9 Fatal error loading the DB: Invalid argument. Exiting.

    在/usr/local/etc 目录下 运行 redis-server 命令重启 redis 服务发现报错,报错信息如下: 如上报错的含义是:当前的redis的版本是3.2.13版本,无法处理 ver ...

  3. CentOS7.x编译安装zabbix4.0

    编译安装zabbix Zabbix简介 Zabbix 是一个企业级的分布式开源监控方案. Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件.Zabbix使用灵活的通知机制,允许用户 ...

  4. JavaScript判断对象是否是NULL

    这个方法是我踩了很多坑之后找到的,对数组等类型的对象都很好使,果断收藏! function isEmpty(obj) { // 检验 undefined 和 null if (!obj &&a ...

  5. ABP之模块系统

    简介 ASP.NET Boilerplate提供了构建模块的基础结构,并将它们组合在一起以创建应用程序. 模块可以依赖于另一个模块. 通常,一个程序集被视为一个模块. 如果创建具有多个程序集的应用程序 ...

  6. python操作Excel、openpyxl 之图表,折线图、饼图、柱状图等

    一.准备 需要模块: from openpyxl.workbook import Workbook from openpyxl.chart import Series,LineChart, Refer ...

  7. mysql-笔记 隔离级别、事务

    1 隔离级别:低级别的隔离通常可以执行更高的并发,系统 开销也更低 2 Read uncommitted:事务可以读取未提交的数据,脏读,应少用 3 read committed:不可重复读,事务只能 ...

  8. C语言博客作业06--结构体&文件

    1.本章学习总结 1.1思维导图 1.2.本章学习体会 这是这学期最后一次博客园作业,文件和结构体感觉比指针还难,一直搞不是很懂,大作业没有方向感,现在还在搞,大作业没有成品,只能先去借鉴舍友的优秀代 ...

  9. 通过10046 event来获取真实的执行计划

    获取SQL执行计划的方式有很多,但是某些时候获取的SQL执行计划并不是准确的,只有在SQL真实执行之后获取到的SQL PLAN才是真实准确的,其他方式(如,explain plan)获取到的执行计划都 ...

  10. 使用diff或者vimdiff比较远程文件(夹)与本地文件夹

    方法1:管道给diff $ssh eric@192.168.1.11 "cat ~/remote_file.txt" | diff - ~/local_file.txt 如果 Fi ...