星星港湾 發表於 2021-8-3 20:02:00

uni-app之数据驱动的picker选择器( uni-data-picker)之可以选择到任意级别

<h1>背景说明</h1>
<p style="margin-left: 30px">uni-app 官方的插件市场有数据驱动选择器,可以用作多级分类的场景。本人引入插件后,发现,在h5和微信小程序都只能选择到叶子级。而在给出的官方组件示例中确并非如此。</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/1602649/202108/1602649-20210803134652230-71620805.png"></p>
<p style="margin-left: 30px">&nbsp;可以选择年级,而不选择班级。然后,想试试官方的手机版,发现并没有示例(截至日期2021年8月3日)为止。</p>
<p style="margin-left: 30px">当然,这里操作起选择器的时候,或多或少,有些繁琐。因为下方的选择框关闭一次。</p>
<p style="margin-left: 30px">然后,我把官网的示例项目下载下来。运行一下,发现做不到只选择年级,不选择班级(似乎,只能到叶子节点了)。</p>
<p style="margin-left: 30px">两边的东西居然有区别。不知道官网以后会不会改进方案。</p>
<table border="0">
<tbody>
<tr style="background-color: rgba(204, 204, 204, 1)">
<td>&nbsp;</td>
<td><strong>网页的组件示例</strong></td>
<td><strong>下载的组件示例</strong></td>
</tr>
<tr>
<td>点击一次后</td>
<td>选择当前组件,并关闭用于选择的弹出框</td>
<td>如果包含子级,则切换到子级选择页面;如果不包含子级选择,则关闭</td>
</tr>
</tbody>
</table>
<p style="margin-left: 30px">不过,本人的需求中,有可能选择的不是叶子。比如,选择部门的时候。所以,怎样才能任意层级的数据都是可选的呢?</p>
<h1>问题和提出解决方案</h1>
<p style="margin-left: 30px">查看说明,发现了uni-data-picker包含以下事件。</p>
<table border="0">
<tbody>
<tr style="background-color: rgba(204, 204, 204, 1)">
<td><strong>事件名称</strong></td>
<td><strong>类型</strong></td>
<td><strong>说明</strong></td>
</tr>
<tr>
<td>@change</td>
<td>EventHandle</td>
<td>选择完成时触发 {detail: {value}}</td>
</tr>
<tr>
<td>@nodeclick</td>
<td>EventHandle</td>
<td>节点被点击时触发</td>
</tr>
<tr>
<td>@popupclosed</td>
<td>EventHandle</td>
<td>弹出层被关闭时触发</td>
</tr>
</tbody>
</table>
<p style="margin-left: 30px">&nbsp;思前想后,有了两种解决方案。</p>
<p style="margin-left: 30px"><strong>方案一</strong>:当点击某一项(触发<span style="color: rgba(255, 0, 0, 1); background-color: rgba(192, 192, 192, 1)">@nodeclick</span>)时,则选中某一项。</p>
<p style="margin-left: 30px"><strong>方案二</strong>:当点击某一项(触发<span style="color: rgba(255, 0, 0, 1)"><span style="background-color: rgba(192, 192, 192, 1)">@nodeclick</span><span style="color: rgba(0, 0, 0, 1)">)时</span></span>,暂存当前选中的项值;当关闭弹出层(<span style="color: rgba(255, 0, 0, 1); background-color: rgba(192, 192, 192, 1)">@popupclosed</span>)时,则选中某一项。</p>
<p style="margin-left: 30px">考虑如果涉及级联,则方案二,数据更少的变动,则可能更少的影响级联。</p>
<h1>代码示例</h1>
<p style="margin-left: 30px">方案一的.vue文件代码如下:</p>
<div class="cnblogs_code"><img id="code_img_closed_0b23f54e-b87a-44af-bdc9-11cdb4630d0d" class="code_img_closed lazyload" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_0b23f54e-b87a-44af-bdc9-11cdb4630d0d" class="code_img_opened lazyload" style="display: none" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_0b23f54e-b87a-44af-bdc9-11cdb4630d0d" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> &lt;template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span>   &lt;view class="container"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span>         &lt;view class="title"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span>             &lt;text&gt;uni-data-picker 本地数据&lt;/text&gt;
<span style="color: rgba(0, 128, 128, 1)"> 5</span>         &lt;/view&gt;
<span style="color: rgba(0, 128, 128, 1)"> 6</span>         &lt;uni-data-picker placeholder="请选择班级" popup-title="请选择所在地区" :localdata="dataTree" v-model="classes"
<span style="color: rgba(0, 128, 128, 1)"> 7</span>            @nodeclick="onnodeclick"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 8</span>         &lt;/uni-data-picker&gt;
<span style="color: rgba(0, 128, 128, 1)"> 9</span>
<span style="color: rgba(0, 128, 128, 1)">10</span>   &lt;/view&gt;
<span style="color: rgba(0, 128, 128, 1)">11</span> &lt;/template&gt;
<span style="color: rgba(0, 128, 128, 1)">12</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> &lt;script&gt;
<span style="color: rgba(0, 128, 128, 1)">14</span>   export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">      data() {
</span><span style="color: rgba(0, 128, 128, 1)">16</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">17</span>               classes: '1-2'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">                dataTree: [{
</span><span style="color: rgba(0, 128, 128, 1)">19</span>                     text: "一年级"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">20</span>                     value: "1-0"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 0, 1)">                  children: [{
</span><span style="color: rgba(0, 128, 128, 1)">22</span>                         text: "1.1班"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">23</span>                         value: "1-1"
<span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)">                  },
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">                  {
</span><span style="color: rgba(0, 128, 128, 1)">26</span>                         text: "1.2班"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">27</span>                         value: "1-2"
<span style="color: rgba(0, 128, 128, 1)">28</span> <span style="color: rgba(0, 0, 0, 1)">                  }]
</span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)">                },
</span><span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 0, 1)">                {
</span><span style="color: rgba(0, 128, 128, 1)">31</span>                     text: "二年级"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">32</span>                     value: "2-0"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 0, 1)">                  children: [{
</span><span style="color: rgba(0, 128, 128, 1)">34</span>                         text: "2.1班"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">35</span>                         value: "2-1"
<span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 0, 1)">                  },
</span><span style="color: rgba(0, 128, 128, 1)">37</span> <span style="color: rgba(0, 0, 0, 1)">                  {
</span><span style="color: rgba(0, 128, 128, 1)">38</span>                         text: "2.2班"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">39</span>                         value: "2-2"
<span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 0, 0, 1)">                  }]
</span><span style="color: rgba(0, 128, 128, 1)">41</span> <span style="color: rgba(0, 0, 0, 1)">                },
</span><span style="color: rgba(0, 128, 128, 1)">42</span> <span style="color: rgba(0, 0, 0, 1)">                {
</span><span style="color: rgba(0, 128, 128, 1)">43</span>                     text: "三年级"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">44</span>                     value: "3-0"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">45</span>                     disable: <span style="color: rgba(0, 0, 255, 1)">true</span>
<span style="color: rgba(0, 128, 128, 1)">46</span> <span style="color: rgba(0, 0, 0, 1)">                }]
</span><span style="color: rgba(0, 128, 128, 1)">47</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">48</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">49</span> <span style="color: rgba(0, 0, 0, 1)">      methods: {
</span><span style="color: rgba(0, 128, 128, 1)">50</span> <span style="color: rgba(0, 0, 0, 1)">            onnodeclick(e) {
</span><span style="color: rgba(0, 128, 128, 1)">51</span>               <span style="color: rgba(0, 0, 255, 1)">this</span>.classes =<span style="color: rgba(0, 0, 0, 1)"> e.value;
</span><span style="color: rgba(0, 128, 128, 1)">52</span> <span style="color: rgba(0, 0, 0, 1)">            },
</span><span style="color: rgba(0, 128, 128, 1)">53</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">54</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">55</span> &lt;/script&gt;
<span style="color: rgba(0, 128, 128, 1)">56</span>
<span style="color: rgba(0, 128, 128, 1)">57</span> &lt;style&gt;
<span style="color: rgba(0, 128, 128, 1)">58</span> <span style="color: rgba(0, 0, 0, 1)">    .container {
</span><span style="color: rgba(0, 128, 128, 1)">59</span>         height: 100%<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">60</span>         <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> #ifndef APP-NVUE </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">61</span> <span style="color: rgba(0, 0, 0, 1)">      display: flex;
</span><span style="color: rgba(0, 128, 128, 1)">62</span>         max-<span style="color: rgba(0, 0, 0, 1)">width: 500px;
</span><span style="color: rgba(0, 128, 128, 1)">63</span>         padding: 0<span style="color: rgba(0, 0, 0, 1)"> 15px;
</span><span style="color: rgba(0, 128, 128, 1)">64</span>         <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> #endif </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">65</span>         flex-<span style="color: rgba(0, 0, 0, 1)">direction: column;
</span><span style="color: rgba(0, 128, 128, 1)">66</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">67</span>
<span style="color: rgba(0, 128, 128, 1)">68</span> <span style="color: rgba(0, 0, 0, 1)">    .title {
</span><span style="color: rgba(0, 128, 128, 1)">69</span>         font-<span style="color: rgba(0, 0, 0, 1)">size: 14px;
</span><span style="color: rgba(0, 128, 128, 1)">70</span>         font-<span style="color: rgba(0, 0, 0, 1)">weight: bold;
</span><span style="color: rgba(0, 128, 128, 1)">71</span>         margin: 20px 0 5px 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">72</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">73</span>
<span style="color: rgba(0, 128, 128, 1)">74</span>   .data-<span style="color: rgba(0, 0, 0, 1)">pickerview {
</span><span style="color: rgba(0, 128, 128, 1)">75</span> <span style="color: rgba(0, 0, 0, 1)">      height: 400px;
</span><span style="color: rgba(0, 128, 128, 1)">76</span> <span style="color: rgba(0, 0, 0, 1)">      border: 1px #e5e5e5 solid;
</span><span style="color: rgba(0, 128, 128, 1)">77</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">78</span> &lt;/style&gt;</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p style="margin-left: 30px">方案二的.vue文件代码如下:</p>
<div class="cnblogs_code"><img id="code_img_closed_28d49c9c-3138-475f-a91c-e7cf705ba729" class="code_img_closed lazyload" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_28d49c9c-3138-475f-a91c-e7cf705ba729" class="code_img_opened lazyload" style="display: none" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_28d49c9c-3138-475f-a91c-e7cf705ba729" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> &lt;template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span>   &lt;view class="container"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span>         &lt;view class="title"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span>             &lt;text&gt;uni-data-picker 本地数据&lt;/text&gt;
<span style="color: rgba(0, 128, 128, 1)"> 5</span>         &lt;/view&gt;
<span style="color: rgba(0, 128, 128, 1)"> 6</span>         &lt;uni-data-picker placeholder="请选择班级" popup-title="请选择所在地区" :localdata="dataTree" v-model="classes"
<span style="color: rgba(0, 128, 128, 1)"> 7</span>            @nodeclick="onnodeclick"@popupclosed="onpopupclosed"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 8</span>         &lt;/uni-data-picker&gt;
<span style="color: rgba(0, 128, 128, 1)"> 9</span>
<span style="color: rgba(0, 128, 128, 1)">10</span>   &lt;/view&gt;
<span style="color: rgba(0, 128, 128, 1)">11</span> &lt;/template&gt;
<span style="color: rgba(0, 128, 128, 1)">12</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> &lt;script&gt;
<span style="color: rgba(0, 128, 128, 1)">14</span>   export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">      data() {
</span><span style="color: rgba(0, 128, 128, 1)">16</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">17</span>               tempClasses : '',    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 临时存放vue值</span>
<span style="color: rgba(0, 128, 128, 1)">18</span>               classes: '1-2'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">                dataTree: [{
</span><span style="color: rgba(0, 128, 128, 1)">20</span>                     text: "一年级"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">21</span>                     value: "1-0"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">                  children: [{
</span><span style="color: rgba(0, 128, 128, 1)">23</span>                         text: "1.1班"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">24</span>                         value: "1-1"
<span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">                  },
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">                  {
</span><span style="color: rgba(0, 128, 128, 1)">27</span>                         text: "1.2班"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">28</span>                         value: "1-2"
<span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)">                  }]
</span><span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 0, 1)">                },
</span><span style="color: rgba(0, 128, 128, 1)">31</span> <span style="color: rgba(0, 0, 0, 1)">                {
</span><span style="color: rgba(0, 128, 128, 1)">32</span>                     text: "二年级"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">33</span>                     value: "2-0"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 0, 1)">                  children: [{
</span><span style="color: rgba(0, 128, 128, 1)">35</span>                         text: "2.1班"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">36</span>                         value: "2-1"
<span style="color: rgba(0, 128, 128, 1)">37</span> <span style="color: rgba(0, 0, 0, 1)">                  },
</span><span style="color: rgba(0, 128, 128, 1)">38</span> <span style="color: rgba(0, 0, 0, 1)">                  {
</span><span style="color: rgba(0, 128, 128, 1)">39</span>                         text: "2.2班"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">40</span>                         value: "2-2"
<span style="color: rgba(0, 128, 128, 1)">41</span> <span style="color: rgba(0, 0, 0, 1)">                  }]
</span><span style="color: rgba(0, 128, 128, 1)">42</span> <span style="color: rgba(0, 0, 0, 1)">                },
</span><span style="color: rgba(0, 128, 128, 1)">43</span> <span style="color: rgba(0, 0, 0, 1)">                {
</span><span style="color: rgba(0, 128, 128, 1)">44</span>                     text: "三年级"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">45</span>                     value: "3-0"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">46</span>                     disable: <span style="color: rgba(0, 0, 255, 1)">true</span>
<span style="color: rgba(0, 128, 128, 1)">47</span> <span style="color: rgba(0, 0, 0, 1)">                }]
</span><span style="color: rgba(0, 128, 128, 1)">48</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">49</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">50</span> <span style="color: rgba(0, 0, 0, 1)">      methods: {
</span><span style="color: rgba(0, 128, 128, 1)">51</span>             <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* 点击选项时执行方法
</span><span style="color: rgba(0, 128, 128, 1)">52</span> <span style="color: rgba(0, 128, 0, 1)">             * @param {Object} e
</span><span style="color: rgba(0, 128, 128, 1)">53</span>            <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">54</span> <span style="color: rgba(0, 0, 0, 1)">            onnodeclick(e) {
</span><span style="color: rgba(0, 128, 128, 1)">55</span>               <span style="color: rgba(0, 0, 255, 1)">this</span>.tempClasses =<span style="color: rgba(0, 0, 0, 1)"> e.value;
</span><span style="color: rgba(0, 128, 128, 1)">56</span> <span style="color: rgba(0, 0, 0, 1)">            },
</span><span style="color: rgba(0, 128, 128, 1)">57</span>             <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* 关闭弹出框执行方法
</span><span style="color: rgba(0, 128, 128, 1)">58</span> <span style="color: rgba(0, 128, 0, 1)">             * @param {Object} e
</span><span style="color: rgba(0, 128, 128, 1)">59</span>            <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">60</span> <span style="color: rgba(0, 0, 0, 1)">            onpopupclosed(e) {
</span><span style="color: rgba(0, 128, 128, 1)">61</span>               <span style="color: rgba(0, 0, 255, 1)">this</span>.classes = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.tempClasses;
</span><span style="color: rgba(0, 128, 128, 1)">62</span> <span style="color: rgba(0, 0, 0, 1)">            },
</span><span style="color: rgba(0, 128, 128, 1)">63</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">64</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">65</span> &lt;/script&gt;
<span style="color: rgba(0, 128, 128, 1)">66</span>
<span style="color: rgba(0, 128, 128, 1)">67</span> &lt;style&gt;
<span style="color: rgba(0, 128, 128, 1)">68</span> <span style="color: rgba(0, 0, 0, 1)">    .container {
</span><span style="color: rgba(0, 128, 128, 1)">69</span>         height: 100%<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">70</span>         <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> #ifndef APP-NVUE </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">71</span> <span style="color: rgba(0, 0, 0, 1)">      display: flex;
</span><span style="color: rgba(0, 128, 128, 1)">72</span>         max-<span style="color: rgba(0, 0, 0, 1)">width: 500px;
</span><span style="color: rgba(0, 128, 128, 1)">73</span>         padding: 0<span style="color: rgba(0, 0, 0, 1)"> 15px;
</span><span style="color: rgba(0, 128, 128, 1)">74</span>         <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> #endif </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">75</span>         flex-<span style="color: rgba(0, 0, 0, 1)">direction: column;
</span><span style="color: rgba(0, 128, 128, 1)">76</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">77</span>
<span style="color: rgba(0, 128, 128, 1)">78</span> <span style="color: rgba(0, 0, 0, 1)">    .title {
</span><span style="color: rgba(0, 128, 128, 1)">79</span>         font-<span style="color: rgba(0, 0, 0, 1)">size: 14px;
</span><span style="color: rgba(0, 128, 128, 1)">80</span>         font-<span style="color: rgba(0, 0, 0, 1)">weight: bold;
</span><span style="color: rgba(0, 128, 128, 1)">81</span>         margin: 20px 0 5px 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">82</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">83</span>
<span style="color: rgba(0, 128, 128, 1)">84</span>   .data-<span style="color: rgba(0, 0, 0, 1)">pickerview {
</span><span style="color: rgba(0, 128, 128, 1)">85</span> <span style="color: rgba(0, 0, 0, 1)">      height: 400px;
</span><span style="color: rgba(0, 128, 128, 1)">86</span> <span style="color: rgba(0, 0, 0, 1)">      border: 1px #e5e5e5 solid;
</span><span style="color: rgba(0, 128, 128, 1)">87</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">88</span> &lt;/style&gt;</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h1>扩展——获取数据驱动选择器当前的选中值</h1>
<p style="margin-left: 30px">数据驱动选择器中,选择完成时(@change)可以获取到当前选中的数组。但是,@nodeclick方法或其他状态下是否可用获取当前选中的数组?可以。我们只要标记对应的数据驱动选择器,即可在代码中找到对象及其选中的数组。</p>
<p style="margin-left: 30px">1.标记uni-data-picker对象。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">uni-data-picker </span><span style="color: rgba(255, 0, 0, 1)">ref</span><span style="color: rgba(0, 0, 255, 1)">="class"</span><span style="color: rgba(255, 0, 0, 1)"> placeholder</span><span style="color: rgba(0, 0, 255, 1)">="请选择班级"</span><span style="color: rgba(255, 0, 0, 1)"> popup-title</span><span style="color: rgba(0, 0, 255, 1)">="请选择所在地区"</span><span style="color: rgba(255, 0, 0, 1)"> :localdata</span><span style="color: rgba(0, 0, 255, 1)">="dataTree"</span><span style="color: rgba(255, 0, 0, 1)"> v-model</span><span style="color: rgba(0, 0, 255, 1)">="classes"</span><span style="color: rgba(255, 0, 0, 1)">
         @nodeclick</span><span style="color: rgba(0, 0, 255, 1)">="onnodeclick"</span> <span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p style="margin-left: 30px">2.获取当前对象的选中值。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 0, 1)">onnodeclick(e) {
</span><span style="color: rgba(0, 128, 128, 1)">2</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.classes =<span style="color: rgba(0, 0, 0, 1)"> e.value;
</span><span style="color: rgba(0, 128, 128, 1)">3</span>   let selected = <span style="color: rgba(0, 0, 255, 1)">this</span>.$refs["class"<span style="color: rgba(0, 0, 0, 1)">].selected;
</span><span style="color: rgba(0, 128, 128, 1)">4</span>   console.log("当前选中的值=&gt;"<span style="color: rgba(0, 0, 0, 1)"> , selected);
</span><span style="color: rgba(0, 128, 128, 1)">5</span> },</pre>
</div>
<h1>参考网址</h1>
<ul>
<li>uni-data-picker 数据驱动的picker选择器:https://www.cnblogs.com/luyj00436/p/15091506.html</li>
</ul>

</div>
<div id="MySignature" role="contentinfo">
    有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。<br><br>
来源:https://www.cnblogs.com/luyj00436/p/15079273.html
頁: [1]
查看完整版本: uni-app之数据驱动的picker选择器( uni-data-picker)之可以选择到任意级别