Commit d88eaac5cfb4c332659dadf9c5740050ca404527
1 parent
50f4289a
优化
Showing
4 changed files
with
94 additions
and
106 deletions
Show diff stats
build/Input/Input.js
1 | 1 | import style from "antd/lib/input/style/index.css"; |
2 | -angular | |
3 | - .module("esNgAntd") | |
4 | - .directive("antdInput", function ($compile, esNgAntd) { | |
5 | - return { | |
6 | - controllerAs: "antdInput", | |
7 | - restrict: "E", | |
8 | - transclude: true, | |
9 | - replace: true, | |
10 | - scope: { | |
11 | - value: "@", | |
12 | - placeholder: "@", | |
13 | - addonBefore: "@", | |
14 | - addonAfter: "@", | |
15 | - disabled: "@", | |
16 | - onChange: "&", | |
17 | - maxLength: "@", | |
18 | - }, | |
19 | - controller: function ($scope, $element, $attrs) { | |
20 | - this.getContext = function () { | |
21 | - return $scope; | |
22 | - }; | |
2 | +angular.module("esNgAntd").directive("antdInput", ["$compile", "esNgAntd", function ($compile, esNgAntd) { | |
3 | + return { | |
4 | + restrict: "E", | |
5 | + replace: true, | |
6 | + transclude: true, | |
7 | + scope: { | |
8 | + value: "@", | |
9 | + placeholder: "@", | |
10 | + addonBefore: "@", | |
11 | + addonAfter: "@", | |
12 | + disabled: "=", | |
13 | + onChange: "&", | |
14 | + maxLength: "=" | |
15 | + }, | |
16 | + require: ["^?antdFormItem", "^?antdForm"], | |
17 | + controller: function ($scope, $element, $attrs) { | |
18 | + $scope.state = { | |
19 | + inputEventTarget: null | |
20 | + }; | |
23 | 21 | |
24 | - $scope.state = { | |
25 | - inputEventTarget: null, | |
26 | - }; | |
22 | + $scope.handleClick = function (event) { | |
23 | + $scope.state.inputEventTarget = event; | |
24 | + }; | |
27 | 25 | |
28 | - $scope.handleClick = function (event) { | |
29 | - $scope.state.inputEventTarget = event; | |
30 | - }; | |
26 | + $scope.handleChange = function () { | |
27 | + $scope.onChange({ | |
28 | + event: $scope.state.inputEventTarget | |
29 | + }); | |
30 | + }; | |
31 | 31 | |
32 | - $scope.handleChange = function () { | |
33 | - $scope.onChange({ | |
34 | - event: $scope.state.inputEventTarget, | |
35 | - }); | |
36 | - }; | |
32 | + $scope.getTemplate = function () { | |
33 | + let maxLengthAttribute = ""; | |
34 | + let styleAttribute = ""; | |
35 | + let idAttribute = ""; | |
37 | 36 | |
38 | - $scope.getTemplate = function () { | |
39 | - let maxLengthAttribute = ""; | |
40 | - let styleAttribute = ""; | |
41 | - let idAttribute = ""; | |
37 | + if ($scope.maxLength) { | |
38 | + maxLengthAttribute = `maxlength="${$scope.maxLength}"`; | |
39 | + } | |
42 | 40 | |
43 | - if ($scope.maxLength) { | |
44 | - maxLengthAttribute = `maxlength="${$scope.maxLength}"`; | |
45 | - } | |
41 | + if ($scope.style) { | |
42 | + styleAttribute = `style="${$scope.style}"`; | |
43 | + } | |
46 | 44 | |
47 | - if ($scope.style) { | |
48 | - styleAttribute = `style="${$scope.style}"`; | |
49 | - } | |
45 | + if ($scope.antdFormItem && $scope.antdFormItem.name) { | |
46 | + idAttribute = `id="${$scope.antdFormItem.name}"`; | |
47 | + } | |
50 | 48 | |
51 | - if ($scope.antdFormItem && $scope.antdFormItem.name) { | |
52 | - idAttribute = `id="${$scope.antdFormItem.name}"`; | |
53 | - } | |
54 | - | |
55 | - let templates = [ | |
56 | - `<input type="text" class="ant-input" placeholder={{placeholder}} ng-change="handleChange()" ng-model="value" ng-focus="handleClick($event)" ng-disabled="disabled==='true'" ${styleAttribute} ${maxLengthAttribute} ${idAttribute}/>`, | |
57 | - `<span class="ant-input-group-wrapper" ng-if="addonBefore||addonAfter"> | |
49 | + let templates = [`<input type="text" class="ant-input" placeholder={{placeholder}} ng-change="handleChange()" ng-model="value" ng-focus="handleClick($event)" ng-disabled="disabled===true" ${styleAttribute} ${maxLengthAttribute} ${idAttribute}/>`, `<span class="ant-input-group-wrapper" ng-if="addonBefore||addonAfter"> | |
58 | 50 | <span class="ant-input-wrapper ant-input-group" style=""> |
59 | 51 | <span class="ant-input-group-addon" ng-if="addonBefore">{{addonBefore}}</span> |
60 | - <input type="text" class="ant-input" ng-change="handleChange()" ng-model="value" ng-focus="handleClick($event)" ng-disabled="disabled==='true'" style="${$scope.style}" ${styleAttribute} ${maxLengthAttribute} ${idAttribute}/> | |
52 | + <input type="text" class="ant-input" ng-change="handleChange()" ng-model="value" ng-focus="handleClick($event)" ng-disabled="disabled===true" style="${$scope.style}" ${styleAttribute} ${maxLengthAttribute} ${idAttribute}/> | |
61 | 53 | <span class="ant-input-group-addon" ng-if="addonAfter">{{addonAfter}}</span> |
62 | 54 | </span> |
63 | - </span>`, | |
64 | - ]; | |
55 | + </span>`]; | |
65 | 56 | |
66 | - if ($scope.addonBefore || $scope.addonAfter) { | |
67 | - return templates[1]; | |
68 | - } else { | |
69 | - return templates[0]; | |
70 | - } | |
71 | - }; | |
72 | - }, | |
73 | - require: ["?^antdFormItem", "?^antdForm"], | |
74 | - link: function ( | |
75 | - $scope, | |
76 | - $element, | |
77 | - $attrs, | |
78 | - $controllers, | |
79 | - $transclude | |
80 | - ) { | |
81 | - let [antdFormItem, antdForm] = $controllers; | |
82 | - esNgAntd.createStyle("ant-input", style); // 上下文 | |
57 | + if ($scope.addonBefore || $scope.addonAfter) { | |
58 | + return templates[1]; | |
59 | + } else { | |
60 | + return templates[0]; | |
61 | + } | |
62 | + }; | |
63 | + }, | |
64 | + link: function ($scope, $element, $attrs, $controllers) { | |
65 | + let [antdForm, antdFormItem] = $controllers; | |
66 | + esNgAntd.createStyle("ant-input", style); // 上下文 | |
83 | 67 | |
84 | - if (antdForm) { | |
85 | - $scope.antdForm = antdForm.getContext(); | |
86 | - $scope.antdForm.state.formItems.push($scope); | |
87 | - } | |
68 | + if (antdForm) { | |
69 | + $scope.antdForm = antdForm.getContext(); | |
70 | + $scope.antdForm.state.formItems.push($scope); | |
71 | + } | |
88 | 72 | |
89 | - if (antdFormItem) { | |
90 | - $scope.antdFormItem = antdFormItem.getContext(); | |
91 | - } | |
73 | + if (antdFormItem) { | |
74 | + $scope.antdFormItem = antdFormItem.getContext(); | |
75 | + } | |
92 | 76 | |
93 | - $scope.style = $attrs.style; | |
94 | - $element.replaceWith($compile($scope.getTemplate())($scope)); | |
95 | - }, | |
96 | - }; | |
97 | - }); | |
77 | + $scope.style = $attrs.style; | |
78 | + $element.replaceWith($compile($scope.getTemplate())($scope)); | |
79 | + } | |
80 | + }; | |
81 | +}]); | |
98 | 82 | \ No newline at end of file | ... | ... |
dist/ng-antd.js
... | ... | @@ -192,7 +192,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Ima |
192 | 192 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { |
193 | 193 | |
194 | 194 | "use strict"; |
195 | -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var antd_lib_input_style_index_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! antd/lib/input/style/index.css */ \"./node_modules/antd/lib/input/style/index.css\");\n\nangular\n .module(\"esNgAntd\")\n .directive(\"antdInput\", function ($compile, esNgAntd) {\n return {\n controllerAs: \"antdInput\",\n restrict: \"E\",\n transclude: true,\n replace: true,\n scope: {\n value: \"@\",\n placeholder: \"@\",\n addonBefore: \"@\",\n addonAfter: \"@\",\n disabled: \"@\",\n onChange: \"&\",\n maxLength: \"@\",\n },\n controller: function ($scope, $element, $attrs) {\n this.getContext = function () {\n return $scope;\n };\n\n $scope.state = {\n inputEventTarget: null,\n };\n\n $scope.handleClick = function (event) {\n $scope.state.inputEventTarget = event;\n };\n\n $scope.handleChange = function () {\n $scope.onChange({\n event: $scope.state.inputEventTarget,\n });\n };\n\n $scope.getTemplate = function () {\n let maxLengthAttribute = \"\";\n let styleAttribute = \"\";\n let idAttribute = \"\";\n\n if ($scope.maxLength) {\n maxLengthAttribute = `maxlength=\"${$scope.maxLength}\"`;\n }\n\n if ($scope.style) {\n styleAttribute = `style=\"${$scope.style}\"`;\n }\n\n if ($scope.antdFormItem && $scope.antdFormItem.name) {\n idAttribute = `id=\"${$scope.antdFormItem.name}\"`;\n }\n\n let templates = [\n `<input type=\"text\" class=\"ant-input\" placeholder={{placeholder}} ng-change=\"handleChange()\" ng-model=\"value\" ng-focus=\"handleClick($event)\" ng-disabled=\"disabled==='true'\" ${styleAttribute} ${maxLengthAttribute} ${idAttribute}/>`,\n `<span class=\"ant-input-group-wrapper\" ng-if=\"addonBefore||addonAfter\">\n <span class=\"ant-input-wrapper ant-input-group\" style=\"\">\n <span class=\"ant-input-group-addon\" ng-if=\"addonBefore\">{{addonBefore}}</span>\n <input type=\"text\" class=\"ant-input\" ng-change=\"handleChange()\" ng-model=\"value\" ng-focus=\"handleClick($event)\" ng-disabled=\"disabled==='true'\" style=\"${$scope.style}\" ${styleAttribute} ${maxLengthAttribute} ${idAttribute}/>\n <span class=\"ant-input-group-addon\" ng-if=\"addonAfter\">{{addonAfter}}</span>\n </span>\n </span>`,\n ];\n\n if ($scope.addonBefore || $scope.addonAfter) {\n return templates[1];\n } else {\n return templates[0];\n }\n };\n },\n require: [\"?^antdFormItem\", \"?^antdForm\"],\n link: function (\n $scope,\n $element,\n $attrs,\n $controllers,\n $transclude\n ) {\n let [antdFormItem, antdForm] = $controllers;\n esNgAntd.createStyle(\"ant-input\", antd_lib_input_style_index_css__WEBPACK_IMPORTED_MODULE_0__[\"default\"]); // 上下文\n\n if (antdForm) {\n $scope.antdForm = antdForm.getContext();\n $scope.antdForm.state.formItems.push($scope);\n }\n\n if (antdFormItem) {\n $scope.antdFormItem = antdFormItem.getContext();\n }\n\n $scope.style = $attrs.style;\n $element.replaceWith($compile($scope.getTemplate())($scope));\n },\n };\n });\n\n\n//# sourceURL=webpack://ng-antd/./build/Input/Input.js?"); | |
195 | +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var antd_lib_input_style_index_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! antd/lib/input/style/index.css */ \"./node_modules/antd/lib/input/style/index.css\");\n\nangular.module(\"esNgAntd\").directive(\"antdInput\", [\"$compile\", \"esNgAntd\", function ($compile, esNgAntd) {\n return {\n restrict: \"E\",\n replace: true,\n transclude: true,\n scope: {\n value: \"@\",\n placeholder: \"@\",\n addonBefore: \"@\",\n addonAfter: \"@\",\n disabled: \"=\",\n onChange: \"&\",\n maxLength: \"=\"\n },\n require: [\"^?antdFormItem\", \"^?antdForm\"],\n controller: function ($scope, $element, $attrs) {\n $scope.state = {\n inputEventTarget: null\n };\n\n $scope.handleClick = function (event) {\n $scope.state.inputEventTarget = event;\n };\n\n $scope.handleChange = function () {\n $scope.onChange({\n event: $scope.state.inputEventTarget\n });\n };\n\n $scope.getTemplate = function () {\n let maxLengthAttribute = \"\";\n let styleAttribute = \"\";\n let idAttribute = \"\";\n\n if ($scope.maxLength) {\n maxLengthAttribute = `maxlength=\"${$scope.maxLength}\"`;\n }\n\n if ($scope.style) {\n styleAttribute = `style=\"${$scope.style}\"`;\n }\n\n if ($scope.antdFormItem && $scope.antdFormItem.name) {\n idAttribute = `id=\"${$scope.antdFormItem.name}\"`;\n }\n\n let templates = [`<input type=\"text\" class=\"ant-input\" placeholder={{placeholder}} ng-change=\"handleChange()\" ng-model=\"value\" ng-focus=\"handleClick($event)\" ng-disabled=\"disabled===true\" ${styleAttribute} ${maxLengthAttribute} ${idAttribute}/>`, `<span class=\"ant-input-group-wrapper\" ng-if=\"addonBefore||addonAfter\">\n <span class=\"ant-input-wrapper ant-input-group\" style=\"\">\n <span class=\"ant-input-group-addon\" ng-if=\"addonBefore\">{{addonBefore}}</span>\n <input type=\"text\" class=\"ant-input\" ng-change=\"handleChange()\" ng-model=\"value\" ng-focus=\"handleClick($event)\" ng-disabled=\"disabled===true\" style=\"${$scope.style}\" ${styleAttribute} ${maxLengthAttribute} ${idAttribute}/>\n <span class=\"ant-input-group-addon\" ng-if=\"addonAfter\">{{addonAfter}}</span>\n </span>\n </span>`];\n\n if ($scope.addonBefore || $scope.addonAfter) {\n return templates[1];\n } else {\n return templates[0];\n }\n };\n },\n link: function ($scope, $element, $attrs, $controllers) {\n let [antdForm, antdFormItem] = $controllers;\n esNgAntd.createStyle(\"ant-input\", antd_lib_input_style_index_css__WEBPACK_IMPORTED_MODULE_0__[\"default\"]); // 上下文\n\n if (antdForm) {\n $scope.antdForm = antdForm.getContext();\n $scope.antdForm.state.formItems.push($scope);\n }\n\n if (antdFormItem) {\n $scope.antdFormItem = antdFormItem.getContext();\n }\n\n $scope.style = $attrs.style;\n $element.replaceWith($compile($scope.getTemplate())($scope));\n }\n };\n}]);\n\n//# sourceURL=webpack://ng-antd/./build/Input/Input.js?"); | |
196 | 196 | |
197 | 197 | /***/ }), |
198 | 198 | ... | ... |
example/input.html
... | ... | @@ -16,32 +16,32 @@ |
16 | 16 | <div ng-app="esNgAntd" ng-controller="mainCtrl"> |
17 | 17 | <div class="container" style="padding: 50px"> |
18 | 18 | <div class="row"> |
19 | - <es-input max-length="3"></es-input> | |
19 | + <antd-input max-length="3"></antd-input> | |
20 | 20 | </div> |
21 | 21 | <div class="row"> |
22 | - <es-input-group compact="true"> | |
23 | - <es-input style="width: 50px"></es-input><es-input style="width: 50px"></es-input> | |
24 | - </es-input-group> | |
22 | + <antd-input-group compact="true"> | |
23 | + <antd-input style="width: 50px"></antd-input><antd-input style="width: 50px"></antd-input> | |
24 | + </antd-input-group> | |
25 | 25 | </div> |
26 | 26 | <div class="row"> |
27 | - <es-input-group compact="true"> | |
28 | - <es-input style="width: 50px" addon-before="长"></es-input><es-input style="width: 50px" addon-before="长"></es-input> | |
29 | - </es-input-group> | |
27 | + <antd-input-group compact="true"> | |
28 | + <antd-input style="width: 50px" addon-before="长"></antd-input><antd-input style="width: 50px" addon-before="长"></antd-input> | |
29 | + </antd-input-group> | |
30 | 30 | </div> |
31 | 31 | <div class="row"> |
32 | - <es-input on-change="handleChange(event)" value="{{value}}"></es-input> | |
32 | + <antd-input on-change="handleChange(event)" value="{{value}}"></antd-input> | |
33 | 33 | </div> |
34 | 34 | <div class="row"> |
35 | - <es-input placeholder="Basic usage" style="width: 50px"></es-input> | |
35 | + <antd-input placeholder="Basic usage" style="width: 200px"></antd-input> | |
36 | 36 | </div> |
37 | 37 | <div class="row"> |
38 | - <es-input placeholder="Basic usage" value="abc"></es-input> | |
38 | + <antd-input placeholder="Basic usage" value="abc"></antd-input> | |
39 | 39 | </div> |
40 | 40 | <div class="row"> |
41 | - <es-input addon-before="Http://" on-change="handleChange()"></es-input> | |
41 | + <antd-input addon-before="Http://" on-change="handleChange()"></antd-input> | |
42 | 42 | </div> |
43 | 43 | <div class="row"> |
44 | - <es-input disabled="{{true}}"></es-input> | |
44 | + <antd-input disabled="true"></antd-input> | |
45 | 45 | </div> |
46 | 46 | </div> |
47 | 47 | </div> | ... | ... |
src/Input/Input.js
... | ... | @@ -4,21 +4,15 @@ class Input { |
4 | 4 | |
5 | 5 | useModules = ["$compile", "esNgAntd"]; |
6 | 6 | |
7 | - props = { | |
8 | - value: String, | |
9 | - placeholder: String, | |
10 | - addonBefore: String, | |
11 | - addonAfter: String, | |
12 | - disabled: Boolean, | |
13 | - onChange: Function, | |
14 | - maxLength: Number | |
15 | - }; | |
7 | + require = ["^?antdFormItem", "^?antdForm"]; | |
16 | 8 | |
17 | 9 | state = { |
18 | 10 | inputEventTarget: null, |
19 | 11 | } |
20 | 12 | |
21 | - constructor(antdFormItem, antdForm) { | |
13 | + constructor($element, $attrs, $controllers) { | |
14 | + let [antdForm, antdFormItem] = $controllers; | |
15 | + | |
22 | 16 | esNgAntd.createStyle("ant-input", style); |
23 | 17 | |
24 | 18 | // 上下文 |
... | ... | @@ -57,11 +51,11 @@ class Input { |
57 | 51 | idAttribute = `id="${this.antdFormItem.name}"`; |
58 | 52 | } |
59 | 53 | let templates = [ |
60 | - `<input type="text" class="ant-input" placeholder={{placeholder}} ng-change="handleChange()" ng-model="value" ng-focus="handleClick($event)" ng-disabled="disabled==='true'" ${styleAttribute} ${maxLengthAttribute} ${idAttribute}/>`, | |
54 | + `<input type="text" class="ant-input" placeholder={{placeholder}} ng-change="handleChange()" ng-model="value" ng-focus="handleClick($event)" ng-disabled="disabled===true" ${styleAttribute} ${maxLengthAttribute} ${idAttribute}/>`, | |
61 | 55 | `<span class="ant-input-group-wrapper" ng-if="addonBefore||addonAfter"> |
62 | 56 | <span class="ant-input-wrapper ant-input-group" style=""> |
63 | 57 | <span class="ant-input-group-addon" ng-if="addonBefore">{{addonBefore}}</span> |
64 | - <input type="text" class="ant-input" ng-change="handleChange()" ng-model="value" ng-focus="handleClick($event)" ng-disabled="disabled==='true'" style="${this.props.style}" ${styleAttribute} ${maxLengthAttribute} ${idAttribute}/> | |
58 | + <input type="text" class="ant-input" ng-change="handleChange()" ng-model="value" ng-focus="handleClick($event)" ng-disabled="disabled===true" style="${this.props.style}" ${styleAttribute} ${maxLengthAttribute} ${idAttribute}/> | |
65 | 59 | <span class="ant-input-group-addon" ng-if="addonAfter">{{addonAfter}}</span> |
66 | 60 | </span> |
67 | 61 | </span>`, |
... | ... | @@ -73,3 +67,13 @@ class Input { |
73 | 67 | } |
74 | 68 | } |
75 | 69 | } |
70 | + | |
71 | +Input.propTypes = { | |
72 | + value: PropTypes.string, | |
73 | + placeholder: PropTypes.string, | |
74 | + addonBefore: PropTypes.string, | |
75 | + addonAfter: PropTypes.string, | |
76 | + disabled: PropTypes.boolean, | |
77 | + onChange: PropTypes.function, | |
78 | + maxLength: PropTypes.number, | |
79 | +}; | ... | ... |