亿碗馋米线 發表於 2019-7-25 14:02:00

钉钉E应用(小程序)之自定义组件开发(计数器)

<p><span style="font-size: 15px"><span class="ql-author-22071174">文前唠叨几句:这个计数器demo虽然小,但也涵盖了整个开发自定义组件的流程和页面与组件之间的相互传值的问题。</span><span class="ql-author-22071174">&nbsp;(</span><span class="ql-author-22071174">并且这个小demo是从支付宝小程序这个大demo里面抠出来的,他两除了api和一些小细节不同之外,自定义组件这方面也还是相通的,有兴趣的朋友可以自己研究下)</span></span></p>
<p><span style="font-size: 15px"><span class="ql-author-22071174">官方文档:https://open-doc.dingtalk.com/microapp/dev/develop-custom-component</span></span></p>
<h2 class="ql-long-22071174"><strong><span class="ql-author-22071174" style="font-size: 15px">最终效果 &amp;&amp; 目录:</span></strong></h2>
<p class="ql-long-22071174"><span class="ql-author-22071174"><img src="https://img2018.cnblogs.com/blog/1074995/201907/1074995-20190725100547841-1012431827.png"></span></p>
<h2 class="ql-long-22071174"><span style="font-size: 16px"><strong><span class="ql-author-22071174">先说说开发自定义组件Counter的开发:</span></strong></span></h2>
<h3 class="ql-long-22071174"><span class="ql-author-22071174"><strong>1、json:</strong></span></h3>
<p class="ql-long-22071174"><span class="ql-author-22071174">component 声明当前的是组件 ; </span></p>
<p class="ql-text-indent-1 ql-long-22071174"><span class="ql-author-22071174">( 可选 ) usingComponents 声明所依赖的组件 ( 即当前的组件需要使用到另外一个自定义组件 ) 所在的位置。</span></p>
<p class="ql-text-indent-1">&nbsp;<img src="https://img2018.cnblogs.com/blog/1074995/201907/1074995-20190725101254039-462062302.png"></p>
<h3 class="ql-long-22071174"><span class="ql-author-22071174"><strong>2、axml:</strong></span></h3>
<p class="ql-long-22071174"><span class="ql-author-22071174">( 其实跟写平常的axml没什么不同 )</span></p>
<p class="ql-long-22071174"><span class="ql-author-22071174">&lt;dd-test /&gt; :只是展示所需要的组件怎样插入到当前组件</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view
</span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="am-stepper-content {{className}}"</span><span style="color: rgba(255, 0, 0, 1)">
style</span><span style="color: rgba(0, 0, 255, 1)">="opacity:{{disabled ? '0.4' : '1'}}"</span><span style="color: rgba(255, 0, 0, 1)">
max</span><span style="color: rgba(0, 0, 255, 1)">="{{max}}"</span><span style="color: rgba(255, 0, 0, 1)">
min</span><span style="color: rgba(0, 0, 255, 1)">="{{min}}"</span><span style="color: rgba(255, 0, 0, 1)">
onChange</span><span style="color: rgba(0, 0, 255, 1)">="{{callBackFn}}"</span><span style="color: rgba(255, 0, 0, 1)">
step</span><span style="color: rgba(0, 0, 255, 1)">="{{step}}"</span><span style="color: rgba(255, 0, 0, 1)">
disabled</span><span style="color: rgba(0, 0, 255, 1)">="{{disabled || readOnly}}"</span>
<span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="am-stepper-reduce"</span><span style="color: rgba(255, 0, 0, 1)"> style</span><span style="color: rgba(0, 0, 255, 1)">="opacity:{{opaReduce}}"</span><span style="color: rgba(255, 0, 0, 1)"> data-type</span><span style="color: rgba(0, 0, 255, 1)">="reduce"</span><span style="color: rgba(255, 0, 0, 1)"> onTap</span><span style="color: rgba(0, 0, 255, 1)">="changeFn"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;</span><span style="color: rgba(128, 0, 0, 1)">text </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="iconfont icon-sub"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">input
    </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="am-stepper-input"</span><span style="color: rgba(255, 0, 0, 1)">
    style</span><span style="color: rgba(0, 0, 255, 1)">="display:{{showNumber ? 'inline-block' : 'none'}};"</span><span style="color: rgba(255, 0, 0, 1)">
    value</span><span style="color: rgba(0, 0, 255, 1)">="{{value}}"</span><span style="color: rgba(255, 0, 0, 1)">
    onBlur</span><span style="color: rgba(0, 0, 255, 1)">="onBlur"</span><span style="color: rgba(255, 0, 0, 1)">
    disabled</span><span style="color: rgba(0, 0, 255, 1)">="{{disabled || readOnly}}"</span><span style="color: rgba(255, 0, 0, 1)">
    type</span><span style="color: rgba(0, 0, 255, 1)">="number"</span>
<span style="color: rgba(0, 0, 255, 1)">/&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="am-stepper-add"</span><span style="color: rgba(255, 0, 0, 1)"> style</span><span style="color: rgba(0, 0, 255, 1)">="opacity:{{opaAdd}}"</span><span style="color: rgba(255, 0, 0, 1)"> data-type</span><span style="color: rgba(0, 0, 255, 1)">="add"</span><span style="color: rgba(255, 0, 0, 1)"> onTap</span><span style="color: rgba(0, 0, 255, 1)">="changeFn"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;</span><span style="color: rgba(128, 0, 0, 1)">text </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="iconfont icon-iconjia"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;<br><br></span><span style="color: rgba(128, 0, 0, 1)"><span style="color: rgba(0, 0, 255, 1)">&lt;</span>dd-test <span style="color: rgba(0, 0, 255, 1)">/&gt;</span></span> 
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<h3><strong>3、js:</strong></h3>
<p>调用Component定义组件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">Component({
data: {   </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">定义组件内所需要的变量</span>
    opaReduce: 1<span style="color: rgba(0, 0, 0, 1)">,
    opaAdd: </span>1<span style="color: rgba(0, 0, 0, 1)">
},
props: {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置默认值 &amp;&amp; 接收传过来的值   通过this.props.xx 获取到默认值 &amp;&amp; 传过来的值</span>
    className: ''<span style="color: rgba(0, 0, 0, 1)">,
    min: </span>1,    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">若没有值传进来,就使用该默认值 ;若传有值进来,传过来的值便覆盖默认值</span>
    max: 100<span style="color: rgba(0, 0, 0, 1)">,
    disabled: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
    value: </span>10<span style="color: rgba(0, 0, 0, 1)">,   
    readOnly: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
    showNumber: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
    step: </span>1<span style="color: rgba(0, 0, 0, 1)">,
    onChange: </span><span style="color: rgba(0, 0, 255, 1)">function</span> onChange() { }    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">触发该组件的事件</span>
<span style="color: rgba(0, 0, 0, 1)">},
didMount: </span><span style="color: rgba(0, 0, 255, 1)">function</span> didMount() { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">页面渲染完毕后执行 (组件的生命周期函数)</span>
    <span style="color: rgba(0, 0, 255, 1)">var</span> _props = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.props,
      value </span>=<span style="color: rgba(0, 0, 0, 1)"> _props.value,
      min </span>=<span style="color: rgba(0, 0, 0, 1)"> _props.min,
      max </span>=<span style="color: rgba(0, 0, 0, 1)"> _props.max;
    </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
      value: Math.min(Math.max(min, value), max)   </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">更新value值</span>
<span style="color: rgba(0, 0, 0, 1)">    });
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 官方解释:didUpdate 为更新后回调,每次组件数据变更的时候都会调用(组件的生命周期函数)。</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 鄙人解释:一有神马动作就立刻执行 </span>
didUpdate: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> didUpdate(preProps) {   
    </span><span style="color: rgba(0, 0, 255, 1)">var</span> _props2 = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.props,
      value </span>=<span style="color: rgba(0, 0, 0, 1)"> _props2.value,
      min </span>=<span style="color: rgba(0, 0, 0, 1)"> _props2.min,
      max </span>=<span style="color: rgba(0, 0, 0, 1)"> _props2.max;
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (preProps.value !==<span style="color: rgba(0, 0, 0, 1)"> value) {
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> newValue =<span style="color: rgba(0, 0, 0, 1)"> Math.min(Math.max(min, value), max);
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
      value: newValue
      });
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.resetFn(newValue);
    }
},
methods: {
    changeFn: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> changeFn(ev) {
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> _props3 = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.props,
      min </span>=<span style="color: rgba(0, 0, 0, 1)"> _props3.min,
      max </span>=<span style="color: rgba(0, 0, 0, 1)"> _props3.max,
      onChange </span>=<span style="color: rgba(0, 0, 0, 1)"> _props3.onChange,
      disabled </span>=<span style="color: rgba(0, 0, 0, 1)"> _props3.disabled,
      readOnly </span>=<span style="color: rgba(0, 0, 0, 1)"> _props3.readOnly,
      step </span>=<span style="color: rgba(0, 0, 0, 1)"> _props3.step;

      </span><span style="color: rgba(0, 0, 255, 1)">var</span> evType =<span style="color: rgba(0, 0, 0, 1)"> ev.target.dataset.type;
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> _data = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data,
      opaReduce </span>=<span style="color: rgba(0, 0, 0, 1)"> _data.opaReduce,
      opaAdd </span>=<span style="color: rgba(0, 0, 0, 1)"> _data.opaAdd,
      value </span>=<span style="color: rgba(0, 0, 0, 1)"> _data.value;

      </span><span style="color: rgba(0, 0, 255, 1)">var</span> enable = disabled ||<span style="color: rgba(0, 0, 0, 1)"> readOnly;
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">enable) {
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (evType === 'reduce'<span style="color: rgba(0, 0, 0, 1)">) {
          </span><span style="color: rgba(0, 0, 255, 1)">if</span> (value &gt;<span style="color: rgba(0, 0, 0, 1)"> min) {
            opaAdd </span>= 1<span style="color: rgba(0, 0, 0, 1)">;
            value </span>= Math.max(min, +value - +<span style="color: rgba(0, 0, 0, 1)">step);
            opaReduce </span>= value === min ? 0.4 : 1<span style="color: rgba(0, 0, 0, 1)">;
          }
      } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
          </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> eslint-disable no-lonely-if </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
          <span style="color: rgba(0, 0, 255, 1)">if</span> (value &lt;<span style="color: rgba(0, 0, 0, 1)"> max) {
            opaReduce </span>= 1<span style="color: rgba(0, 0, 0, 1)">;
            value </span>= Math.min(+value + +<span style="color: rgba(0, 0, 0, 1)">step, max);
            opaAdd </span>= value === max ? 0.4 : 1<span style="color: rgba(0, 0, 0, 1)">;
          }
      }
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
          value: value,
          opaAdd: opaAdd,
          opaReduce: opaReduce
      });
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 值通过 this.props.onChange(xxx)将值传出去</span>
<span style="color: rgba(0, 0, 0, 1)">      onChange(value);
      }
    },
    onBlur: </span><span style="color: rgba(0, 0, 255, 1)">function</span> onBlur(event) {<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">失焦事件函数</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span> value =<span style="color: rgba(0, 0, 0, 1)"> event.detail.value;

      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.resetFn(value);
    },
    resetFn: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> resetFn(value) {
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> _props4 = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.props,
      max </span>=<span style="color: rgba(0, 0, 0, 1)"> _props4.max,
      min </span>=<span style="color: rgba(0, 0, 0, 1)"> _props4.min,
      onChange </span>=<span style="color: rgba(0, 0, 0, 1)"> _props4.onChange;

      </span><span style="color: rgba(0, 0, 255, 1)">var</span> calculatedVal =<span style="color: rgba(0, 0, 0, 1)"> value;
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> opaAdd = 1<span style="color: rgba(0, 0, 0, 1)">;
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> opaReduce = 1<span style="color: rgba(0, 0, 0, 1)">;
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (value &gt;=<span style="color: rgba(0, 0, 0, 1)"> max) {
      calculatedVal </span>=<span style="color: rgba(0, 0, 0, 1)"> max;
      opaAdd </span>= 0.4<span style="color: rgba(0, 0, 0, 1)">;
      } </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (value &lt;=<span style="color: rgba(0, 0, 0, 1)"> min) {
      calculatedVal </span>=<span style="color: rgba(0, 0, 0, 1)"> min;
      opaReduce </span>= 0.4<span style="color: rgba(0, 0, 0, 1)">;
      }
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
      value: calculatedVal,
      opaAdd: opaAdd,
      opaReduce: opaReduce
      });
      onChange(calculatedVal);
    }
}
});</span></pre>
</div>
<h3>4、acss</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">.am-stepper-content </span>{<span style="color: rgba(255, 0, 0, 1)">
box-sizing</span>:<span style="color: rgba(0, 0, 255, 1)"> border-box</span>;<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> flex</span>;<span style="color: rgba(255, 0, 0, 1)">
flex-direction</span>:<span style="color: rgba(0, 0, 255, 1)"> row</span>;<span style="color: rgba(255, 0, 0, 1)">
line-height</span>:<span style="color: rgba(0, 0, 255, 1)"> 70rpx</span>;<span style="color: rgba(255, 0, 0, 1)">
font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 40rpx</span>;<span style="color: rgba(255, 0, 0, 1)">
height</span>:<span style="color: rgba(0, 0, 255, 1)"> 70rpx</span>;<span style="color: rgba(255, 0, 0, 1)">
width</span>:<span style="color: rgba(0, 0, 255, 1)"> 280rpx</span>;<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> #000</span>;<span style="color: rgba(255, 0, 0, 1)">
border</span>:<span style="color: rgba(0, 0, 255, 1)"> 1rpx solid #dcdfe6</span>;
}<span style="color: rgba(128, 0, 0, 1)">

.am-stepper-reduce,
.am-stepper-add </span>{<span style="color: rgba(255, 0, 0, 1)">
box-sizing</span>:<span style="color: rgba(0, 0, 255, 1)"> border-box</span>;<span style="color: rgba(255, 0, 0, 1)">
flex</span>:<span style="color: rgba(0, 0, 255, 1)"> 3</span>;<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> flex</span>;<span style="color: rgba(255, 0, 0, 1)">
justify-content</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
height</span>:<span style="color: rgba(0, 0, 255, 1)"> 66rpx</span>;<span style="color: rgba(255, 0, 0, 1)">
background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #f5f7fa</span>;<span style="color: rgba(255, 0, 0, 1)">
border-top</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;<span style="color: rgba(255, 0, 0, 1)">
border-bottom</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;<span style="color: rgba(255, 0, 0, 1)">
border-left</span>:<span style="color: rgba(0, 0, 255, 1)"> 1rpx solid #dcdfe6</span>;<span style="color: rgba(255, 0, 0, 1)">
border-right</span>:<span style="color: rgba(0, 0, 255, 1)"> 1rpx solid #dcdfe6</span>;
}<span style="color: rgba(128, 0, 0, 1)">

.am-stepper-input </span>{<span style="color: rgba(255, 0, 0, 1)">
box-sizing</span>:<span style="color: rgba(0, 0, 255, 1)"> border-box</span>;<span style="color: rgba(255, 0, 0, 1)">
flex</span>:<span style="color: rgba(0, 0, 255, 1)"> 3</span>;<span style="color: rgba(255, 0, 0, 1)">
height</span>:<span style="color: rgba(0, 0, 255, 1)"> 64rpx</span>;<span style="color: rgba(255, 0, 0, 1)">
padding-left</span>:<span style="color: rgba(0, 0, 255, 1)"> 53rpx</span>;<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> #000</span>;
}</pre>
</div>
<h2><strong><span style="font-size: 16px">准备就绪,调用就简单很多了</span></strong></h2>
<h3><span style="font-size: 15px">1、json:</span></h3>
<p><span style="font-size: 14px"><img src="https://img2018.cnblogs.com/blog/1074995/201907/1074995-20190725110425140-1178713139.png"></span></p>
<h3>2、axml:</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="page"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="page-description"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>Counter <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>

<span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)"> 需要传递的值一定要用{{}}包起来 ;&lt;dd-counter /&gt;:调用自定义组件 </span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">dd-counter </span><span style="color: rgba(255, 0, 0, 1)">onChange</span><span style="color: rgba(0, 0, 255, 1)">="callBackFn"</span><span style="color: rgba(255, 0, 0, 1)"> step</span><span style="color: rgba(0, 0, 255, 1)">="{{1}}"</span><span style="color: rgba(255, 0, 0, 1)"> showNumber readOnly</span><span style="color: rgba(0, 0, 255, 1)">="{{false}}"</span><span style="color: rgba(255, 0, 0, 1)"> value</span><span style="color: rgba(0, 0, 255, 1)">="{{5}}"</span><span style="color: rgba(255, 0, 0, 1)"> min</span><span style="color: rgba(0, 0, 255, 1)">="{{2}}"</span><span style="color: rgba(255, 0, 0, 1)"> max</span><span style="color: rgba(0, 0, 255, 1)">="{{12}}"</span><span style="color: rgba(0, 0, 255, 1)">/&gt;</span>

<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">="padding-top: 10px;font-size: 30rpx;"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>当前的值为: {{val}}<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<h3>3、js:</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">Page({
data:{
    val:</span>''<span style="color: rgba(0, 0, 0, 1)">
},
callBackFn(e){   </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">e:自定义组件传过来的数据</span>
    <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
      val: e
    })
}
})</span></pre>
</div>
<p>自定义组件还有神马</p>
<p>  插槽:slot (用过vue都知道这是啥吧...)</p>
<p>  生命周期:1、didMount(组件渲染完毕后回调);2、didUpdate(组件数据更改后回调);3、didUnmount(组件删除后回调);</p>
<p>  mixins:用来装公共的逻辑的,例(官网例子改造):</p>
<p> <img src="https://img2018.cnblogs.com/blog/1074995/201907/1074995-20190725135139534-2070861996.png">&nbsp;;</p>
<p>等就不细说了,正在开发相关功能或还感兴趣的朋友可移驾官方文档,官方文档有更详细的说明和例子可以参考...</p>
<p>另,还封装了几个组件可加以参考:</p>
<p>https://github.com/wunuolin/dingdingU</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/1074995/202012/1074995-20201227101008940-1889923699.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>ok,文章就到这了,有神马不足的地方,请务必指正,谢谢各位大佬看到此处...</p>
<p><span style="font-family: 黑体; font-size: 15px"><strong>注:转载请标明出处...</strong></span></p><br><br>
来源:https://www.cnblogs.com/wunuolin/p/11243274.html
頁: [1]
查看完整版本: 钉钉E应用(小程序)之自定义组件开发(计数器)