+
{this.$slots.default}
);
diff --git a/packages/utils/create-basic.js b/packages/utils/create-basic.js
index b2acd1655..286e0aabc 100644
--- a/packages/utils/create-basic.js
+++ b/packages/utils/create-basic.js
@@ -1,46 +1,18 @@
/**
* Create a basic component with common options
*/
-import '../locale';
-import createBem from './bem';
+import useSfc from './use/sfc';
+import useBem from './use/bem';
import i18n from '../mixins/i18n';
-import { isDef, camelize } from '.';
-
-function install(Vue) {
- const { name } = this;
- Vue.component(name, this);
- Vue.component((camelize(`-${name}`)), this);
-}
-
-function returnArray() {
- return [];
-}
-
-function defaultProps(props) {
- Object.keys(props).forEach(key => {
- if (props[key] === Array) {
- props[key] = {
- type: Array,
- default: returnArray
- };
- } else if (props[key] === Number) {
- props[key] = {
- type: Number,
- default: 0
- };
- }
- });
-}
+import { isDef } from '.';
export default function (sfc) {
- sfc.name = 'van-' + sfc.name;
- sfc.install = sfc.install || install;
+ sfc = useSfc('van-' + sfc.name)(sfc);
sfc.mixins = sfc.mixins || [];
sfc.mixins.push(i18n);
sfc.methods = sfc.methods || {};
sfc.methods.isDef = isDef;
- sfc.methods.b = createBem(sfc.name);
- sfc.props && defaultProps(sfc.props);
+ sfc.methods.b = useBem(sfc.name);
return sfc;
}
diff --git a/packages/utils/index.js b/packages/utils/index.js
index 3240cca10..c38a41e87 100644
--- a/packages/utils/index.js
+++ b/packages/utils/index.js
@@ -1,4 +1,5 @@
import Vue from 'vue';
+import use from './use';
const isServer = Vue.prototype.$isServer;
@@ -37,6 +38,7 @@ function range(num, min, max) {
}
export {
+ use,
get,
range,
isObj,
diff --git a/packages/utils/bem.js b/packages/utils/use/bem.js
similarity index 100%
rename from packages/utils/bem.js
rename to packages/utils/use/bem.js
diff --git a/packages/utils/use/index.js b/packages/utils/use/index.js
new file mode 100644
index 000000000..bf9a6298a
--- /dev/null
+++ b/packages/utils/use/index.js
@@ -0,0 +1,7 @@
+import useBem from './bem';
+import useSfc from './sfc';
+
+export default function (name) {
+ name = 'van-' + name;
+ return [useSfc(name), useBem(name)];
+}
diff --git a/packages/utils/use/sfc.js b/packages/utils/use/sfc.js
new file mode 100644
index 000000000..11516b21b
--- /dev/null
+++ b/packages/utils/use/sfc.js
@@ -0,0 +1,39 @@
+/**
+ * Create a basic component with common options
+ */
+import '../../locale';
+import { camelize } from '..';
+
+const arrayProp = {
+ type: Array,
+ default: () => []
+};
+
+const numberProp = {
+ type: Number,
+ default: 0
+};
+
+function defaultProps(props) {
+ Object.keys(props).forEach(key => {
+ if (props[key] === Array) {
+ props[key] = arrayProp;
+ } else if (props[key] === Number) {
+ props[key] = numberProp;
+ }
+ });
+}
+
+function install(Vue) {
+ const { name } = this;
+ Vue.component(name, this);
+ Vue.component((camelize(`-${name}`)), this);
+}
+
+export default name => sfc => {
+ sfc.name = name;
+ sfc.install = install;
+ sfc.props && defaultProps(sfc.props);
+
+ return sfc;
+};