{"id":554371,"date":"2022-02-09T14:28:12","date_gmt":"2022-02-09T06:28:12","guid":{"rendered":"http:\/\/4563.org\/?p=554371"},"modified":"2022-02-09T14:28:12","modified_gmt":"2022-02-09T06:28:12","slug":"vue3-%e4%ba%8c%e6%ac%a1%e5%b0%81%e8%a3%85-element-plus-form-%e7%bb%84%e4%bb%b6%e7%9a%84%e7%96%91%e9%97%ae%ef%bc%8c%e8%af%b7%e6%b1%82%e5%a4%a7%e5%ae%b6%e5%b8%ae%e5%bf%99%e3%80%82-6","status":"publish","type":"post","link":"http:\/\/4563.org\/?p=554371","title":{"rendered":"Vue3 \u4e8c\u6b21\u5c01\u88c5 Element Plus Form \u7ec4\u4ef6\u7684\u7591\u95ee\uff0c\u8bf7\u6c42\u5927\u5bb6\u5e2e\u5fd9\u3002"},"content":{"rendered":"<div>\n<div>\n<div>\n<h1> Vue3 \u4e8c\u6b21\u5c01\u88c5 Element Plus Form \u7ec4\u4ef6\u7684\u7591\u95ee\uff0c\u8bf7\u6c42\u5927\u5bb6\u5e2e\u5fd9\u3002 <\/h1>\n<p> <\/p>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : 17681880207 <\/span>  <span><i><\/i> 36<\/span> <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div isfirst=\"1\"> <\/p>\n<p>\u539f\u56e0\u662f\u8fd9\u6837\u7684\uff0c\u56e0\u4e3a\u9879\u76ee\u4e2d\u9700\u8981\u9891\u7e41\u7684\u4f7f\u7528 form \u8868\u5355\uff0c\u52b3\u52a8\u529b\u611f\u89c9\u975e\u5e38\u91cd\u590d\uff0c\u5c31\u51b3\u5b9a\u8fd8\u662f\u5bf9 element-plus \u7684 form \u7ec4\u4ef6\u8fdb\u884c\u4e8c\u6b21\u5c01\u88c5\uff0c\u5c3d\u91cf\u7684\u505a\u5230\u914d\u7f6e\u5316\u7684\u5f00\u53d1\u3002\u5176\u4e2d\u5728\u5f00\u53d1 select \u7684 remote \u6a21\u5f0f\u7684\u65f6\u5019\u9047\u5230\u4e86\u4e00\u4e9b\u95ee\u9898\uff0c\u81ea\u5df1\u8c03\u8bd5\u4e86\u5f88\u4e45\u4e5f\u6ca1\u6709\u627e\u5230\u89e3\u51b3\u529e\u6cd5\u3002\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<p><em>\u4ee3\u7801\u5757 1 \u4e3a\u4e8c\u6b21\u5c01\u88c5\u7684\u7ec4\u4ef6\u3002\u6838\u5fc3\u601d\u8def\u5c31\u662f\u6839\u636e formItem \u4e2d\u7684 type \u5b57\u6bb5\uff0c\u6e32\u67d3\u4e0d\u540c\u7c7b\u578b\u7684\u8868\u5355\u7ec4\u4ef6\u3002<\/em><\/p>\n<pre><code>\/\/ \u4ec5\u5c55\u793a\u6709\u95ee\u9898\u7684\u6838\u5fc3\u903b\u8f91 &lt;template&gt;   &lt;el-form class=\"table-search-form\"            :model=\"props.model\"            :rules=\"props.rules\"&gt;     &lt;el-row :gutter=\"32\"&gt;       &lt;el-col           v-for=\"(formItem, index) in props.formItems\"           :key=\"index\"           :span=\"formItem.span ? formItem.span : 6\"&gt;         &lt;el-form-item             :label=\"formItem.label\"             :prop=\"formItem.prop\"&gt;           &lt;-- \u9690\u85cf\u5176\u4ed6\u7c7b\u578b --&gt;           &lt;el-select               v-if=\"formItem.type === FORM_ITEM_TYPES.REMOTE_SELECT\"               v-model=\"props.model[formItem.prop]\"               :placeholder=\"formItem.placeholder ? formItem.placeholder : formItem.label\"               clearable               filterable               remote               :remote-method=\"formItem.remoteMethod\"               style=\"width: 100%;\"&gt;             &lt;el-option                 v-for=\"(option, index) in formItem.options\"                 :key=\"index\"                 :label=\"option.label\"                 :value=\"option.value\"\/&gt;           &lt;\/el-select&gt;         &lt;\/el-form-item&gt;       &lt;\/el-col&gt;     &lt;\/el-row&gt;   &lt;\/el-form&gt; &lt;\/template&gt;  &lt;script lang=\"ts\" setup&gt; import {defineProps} from 'vue'  enum FORM_ITEM_TYPES {   INPUT = 'input',   SELECT = 'select',   REMOTE_SELECT = 'remoteSelect' }  const props = defineProps({   formItems: {     type: Array,     default: () =&gt; []   },   model: {     type: Object,     default: () =&gt; ({})   },   rules: {     type: Object,     default: () =&gt; ({})   } }) &lt;\/script&gt; <\/code><\/pre>\n<p><em>\u4ee3\u7801\u5757 2 \u4e3a\u4f7f\u7528\u6a21\u5757\u3002<\/em><\/p>\n<pre><code>&lt;template&gt;     &lt;table-search-form         :form-items=\"formItems\"         :model=\"model\"         :rules=\"rules\"\/&gt; &lt;\/template&gt;  &lt;script lang=\"ts\" setup&gt; import {reactive, ref} from 'vue' import TableSearchForm from '@\/components\/TableSearchForm\/index.vue'  const roles = ref&lt;any[]&gt;([   {label: 'Role 1', value: 1} ])  const handleRemoteMethod = (query: string) =&gt; {   setTimeout(() =&gt; {     roles.value = [       {label: 'Role 2', value: 2},       {label: 'Role 3', value: 3}     ]     \/\/ \u6253\u5370\u70b9 1     console.log(roles.value)   }, 1000) }  const formItems = [   \/\/ ...\u7701\u7565   {     label: '\u89d2\u8272 ID',     prop: 'roleId',     type: 'remoteSelect',     remoteMethod: handleRemoteMethod,     options: roles.value   } ]  const model = reactive({   username: '\u5f20\u4e09',   gender: 0,   roleId: '' })  const rules = {   username: [{required: true, message: '\u7528\u6237\u540d\u672a\u8f93\u5165\u3002', trigger: 'none'}] } &lt;\/script&gt; <\/code><\/pre>\n<h1>\u95ee\u9898<\/h1>\n<p> <\/p>\n<p>\u56e0\u4e3a\u662f remote \u6a21\u5f0f\u7684 select \uff0c\u6240\u4ee5\u6211\u4f1a\u4f20\u5165\u4e00\u4e2a handleRemoteMethod \u51fd\u6570\uff0c\u52a8\u6001\u4fee\u6539\u5b83\u7684 options \uff0c\u8fd9\u91cc\u7684 options \u7528\u4e86\u4e00\u4e2a ref \u8fdb\u884c\u63a5\u53d7\u7136\u540e\u4f20\u9012\u5230\u7ec4\u4ef6\u5185\u90e8\u3002\u4f46\u662f\u5f53\u6211\u53d1\u73b0\u89e6\u53d1 handleRemoteMethod \u4e4b\u540e\uff0c\u6253\u5370\u51fa\u6765\u7684\u503c\uff08\u5373\uff1a\u6253\u5370\u70b9 1 \uff09\u5df2\u7ecf\u4fee\u6539\u4e86\uff0c\u4f46\u662f\u7ec4\u4ef6\u6e32\u67d3\u4f9d\u65e7\u53ea\u6709 \u201cRole 1\u201d \u8fd9 1 \u4e2a\u9009\u9879\u3002\u4f46\u662f\u6211\u4f7f\u7528 roles.value.push(&#8230;[]) \u7684\u65b9\u6cd5\uff0c\u53ef\u4ee5\u6b63\u5e38\u7684\u6539\u53d8\u5176\u6e32\u67d3\u3002 \u8bf7\u95ee\u5404\u4f4d\u5927\u4f6c\uff0c\u8fd9\u662f\u4e3a\u5565\uff1f\u6211\u5e94\u8be5\u5982\u4f55\u505a\uff0c\u6c42\u7b54\u7591\u89e3\u60d1\u3002<\/p>\n<\/p><\/div>\n<div> <b>\u5927\u4f6c\u6709\u8a71\u8aaa<\/b> (<span>2<\/span>) <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<ul>\n<li data-pid=\"7077664\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : 17681880207 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>  <\/span> <\/div>\n<\/p><\/div>\n<div> \/\/ \u6211\u5c06\u5176\u4e2d\u7684\u4ee3\u7801\uff0c\u4fee\u6539\u4e3a\u5982\u4e0b\uff0c\u53d1\u73b0\u53ef\u4ee5\u4fee\u6539 options \u4e86\u3002<br \/>\/\/ \u6574\u4e2a formItems \u52a0\u4e0a ref \uff0c\u54ea\u6b65\u7684 roles \u53d6\u6d88 .value \u3002<br \/>\/\/ \u4f46\u662f\u8fd8\u662f\u4e0d\u662f\u5f88\u6e05\u695a\u5176\u4e2d\u7684\u7f18\u7531\uff0c\u6709\u5927\u4f6c\u53ef\u4ee5\u5e2e\u5fd9\u5206\u6790\u4e00\u4e0b\u5417\uff1f<br \/>const formItems = ref([<br \/> \/\/ &#8230;\u7701\u7565<br \/> {<br \/> label: &#8216;\u89d2\u8272 ID&#8217;,<br \/> prop: &#8216;roleId&#8217;,<br \/> type: &#8216;remoteSelect&#8217;,<br \/> remoteMethod: handleRemoteMethod,<br \/> options: roles<br \/> }<br \/>]) <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"7077665\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : 4ark <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>  <\/span> <\/div>\n<\/p><\/div>\n<div> \u53c2\u8003\u4e0b https:\/\/github.com\/FEMessage\/el-form-renderer <\/div>\n<\/p><\/div>\n<\/li>\n<li>\n","protected":false},"excerpt":{"rendered":"<p>Vue3 \u4e8c\u6b21\u5c01\u88c5 Element&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/554371"}],"collection":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=554371"}],"version-history":[{"count":0,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/554371\/revisions"}],"wp:attachment":[{"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=554371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=554371"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=554371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}