红龙一一 發表於 2020-5-27 18:40:00

uni-app 创建typescript 项目 并且引入 vant

<h2>前言</h2>
<p>在小程序上应用uniapp 然后引入ts ,你说香不香,哈哈哈&nbsp;</p>
<p>好了 先来一发教程:</p>
<p>官网下载 软件&nbsp;https://uniapp.dcloud.io/</p>
<p>我创建的TS项目是,用cli 命令行创建的</p>
<p>全局安装vue-cli</p>
<div class="cnblogs_code">
<pre>npm install -g @vue/cli</pre>
</div>
<h3 id="创建uni-app-1">创建uni-app</h3>
<p>使用正式版(对应HBuilderX最新正式版)</p>
<div class="cnblogs_code">
<pre>vue create -p dcloudio/uni-preset-vue my-ts</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/983542/202005/983542-20200527182204799-1260684425.png"></p>
<p>选中 默认模板 (typeScript ) 然后 回车等待</p>
<p>然后在用编辑器打开&nbsp;</p>
<p>&nbsp;</p>
<p>你会发现 目录是这样的:</p>
<p><img src="https://img2020.cnblogs.com/blog/983542/202005/983542-20200527181946083-14245167.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;小程序 page 里面就可以页面啦</p>
<p>在新项目的vue文件中使用内联ts</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">script </span><span style="color: rgba(255, 0, 0, 1)">lang</span><span style="color: rgba(0, 0, 255, 1)">="ts"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p>按需引入vue装饰器</p>
<div class="cnblogs_code">
<pre>import { Component,Vue ,Watch} from "vue-property-decorator";</pre>
</div>
<p>不管干啥先把下面这句话加上。</p>
<div class="cnblogs_code">
<pre>@Component({}) //必须</pre>
</div>
<p>常见装饰器的使用</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">export default class Idnex extends Vue{
private title:String = 'myTitle'; //响应式属性
private num:Number = 123; //对标之前的data函数返回的对象
get age():Number{ //计算属性
return this.num;
}
onLoad(){
this.printTitle();
let a:string = '123';
}
@Watch('title') //watch,此处是监听title的变化
titleChange(newVal:Number,oldVal:Number){
console.log(newVal,oldVal);
}
printTitle():void{ //methods
console.log('hahahhhaha')
}

}</span></pre>
</div>
<p>简单的Demo页面</p>
<div class="cnblogs_code">
<pre>&lt;template&gt;
    &lt;view class="content" @click.self="printTitle"&gt;
      &lt;image class="logo" src="/static/logo.png" @click.stop="title = 'ggg'"&gt;&lt;/image&gt;
      &lt;view class="text-area"&gt;
            &lt;text class="title"&gt;{{title}}&lt;/text&gt;
            &lt;view&gt;{{age}}&lt;/view&gt;
      &lt;/view&gt;
    &lt;/view&gt;
&lt;/template&gt;

&lt;script lang="ts"&gt;<span style="color: rgba(0, 0, 0, 1)">
    import { Component,Vue ,Watch} from </span>"vue-property-decorator"<span style="color: rgba(0, 0, 0, 1)">;
    @Component({})
    export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Idnex extends Vue{
      private title:String</span>= 'myTitle'; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">响应式属性</span>
      private num:Number = 123;         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">对标之前的data函数返回的对象</span>
      get age():Number{                   <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)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.num;
      }
      onLoad(){
            </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.printTitle();
            let a:string </span>= '123'<span style="color: rgba(0, 0, 0, 1)">;
      }
      @Watch(</span>'title')                  <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">watch,此处是监听title的变化</span>
<span style="color: rgba(0, 0, 0, 1)">      titleChange(newVal:Number,oldVal:Number){
            console.log(newVal,oldVal);
      }
      printTitle():</span><span style="color: rgba(0, 0, 255, 1)">void</span>{                <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">methods</span>
            console.log('hahahhhaha'<span style="color: rgba(0, 0, 0, 1)">)
      }
      
    }
</span>&lt;/script&gt;

&lt;style&gt;<span style="color: rgba(0, 0, 0, 1)">
    .content {
      display: flex;
      flex</span>-<span style="color: rgba(0, 0, 0, 1)">direction: column;
      align</span>-<span style="color: rgba(0, 0, 0, 1)">items: center;
      justify</span>-<span style="color: rgba(0, 0, 0, 1)">content: center;
    }

    .logo {
      height: 200rpx;
      width: 200rpx;
      margin</span>-<span style="color: rgba(0, 0, 0, 1)">top: 200rpx;
      margin</span>-<span style="color: rgba(0, 0, 0, 1)">left: auto;
      margin</span>-<span style="color: rgba(0, 0, 0, 1)">right: auto;
      margin</span>-<span style="color: rgba(0, 0, 0, 1)">bottom: 50rpx;
    }

    .text</span>-<span style="color: rgba(0, 0, 0, 1)">area {
      display: flex;
      justify</span>-<span style="color: rgba(0, 0, 0, 1)">content: center;
    }

    .title {
      font</span>-<span style="color: rgba(0, 0, 0, 1)">size: 36rpx;
      color: #8f8f94;
    }
</span>&lt;/style&gt;</pre>
</div>
<p>其实我的index 页面是这样 的</p>
<div class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_4e175b3e-1f94-4323-8eb4-95b79476b806" class="code_img_opened lazyload" style="display: none" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_4e175b3e-1f94-4323-8eb4-95b79476b806" class="cnblogs_code_hide">
<pre>&lt;template&gt;
&lt;view class="content"&gt;
&lt;image class="logo" :src="'../../static/logo.png'"&gt;&lt;/image&gt;
&lt;view&gt;
    &lt;view v-<span style="color: rgba(0, 0, 255, 1)">for</span>="(title, key) in titles" :key="key" class="title"&gt;{{title}}&lt;/view&gt;
&lt;/view&gt;
&lt;/view&gt;
&lt;/template&gt;

&lt;script lang="ts"&gt;<span style="color: rgba(0, 0, 0, 1)">
import { Vue, Component } from </span>'vue-property-decorator'<span style="color: rgba(0, 0, 0, 1)">

@Component
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Home extends Vue {
titles: string[] </span>= ['title1', 'title2'<span style="color: rgba(0, 0, 0, 1)">];
onLoad() {
    console.log(</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.titles)
}
}
</span>&lt;/script&gt;

&lt;style&gt;<span style="color: rgba(0, 0, 0, 1)">
.content {
text</span>-<span style="color: rgba(0, 0, 0, 1)">align: center;
height: 400upx;
}
.logo{
    height: 200upx;
    width: 200upx;
    margin</span>-<span style="color: rgba(0, 0, 0, 1)">top: 200upx;
}
.title {
font</span>-<span style="color: rgba(0, 0, 0, 1)">size: 36upx;
color: #8f8f94;
}
</span>&lt;/style&gt;</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>然后 运行 开发 小程序 你在小程序上就可以看到了</p>
<p><img alt="" data-src="https://img2020.cnblogs.com/blog/983542/202005/983542-20200527182912967-507179087.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>是不是很 开心 哈哈</p>
<p>&nbsp;</p>
<h2>引入vant</h2>
<p>&nbsp;</p>
<ul>
<li>
<p>项目根目录下新建&nbsp;<code>wxcomponents</code>&nbsp;目录 ,此目录应该与<code>components</code>&nbsp;目录同级。</p>
</li>
<li>
<p>直接通过&nbsp;<code>git</code>&nbsp;下载&nbsp;<code>vant-weapp</code>&nbsp;最新源代码,并将<code>dist</code>目录拷贝到新建的<code>wxcomponents</code>目录下,并重命名<code>dist</code>@vant/weapp。</p>
</li>
</ul>
<p>在你的 pages.json 文件下写</p>
<div class="cnblogs_code">
<pre> "globalStyle"<span style="color: rgba(0, 0, 0, 1)">: {
    </span>"backgroundColor": "light"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"navigationBarBackgroundColor": "#fd4d67"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"navigationBarTitleText": "WeChat"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"navigationBarTextStyle": "white"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"usingComponents"<span style="color: rgba(0, 0, 0, 1)">: {
      </span>"van-button": "wxcomponents/@vant/weapp/button/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-datetime-picker": "wxcomponents/@vant/weapp/datetime-picker/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-area": "wxcomponents/@vant/weapp/area/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-checkbox": "wxcomponents/@vant/weapp/checkbox/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-checkbox-group": "wxcomponents/@vant/weapp/checkbox-group/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-picker": "wxcomponents/@vant/weapp/picker/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-cell": "wxcomponents/@vant/weapp/cell/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-cell-group": "wxcomponents/@vant/weapp/cell-group/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-popup": "wxcomponents/@vant/weapp/popup/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-tabs": "wxcomponents/@vant/weapp/tabs/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-tab": "wxcomponents/@vant/weapp/tab/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-radio": "wxcomponents/@vant/weapp/radio/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-radio-group": "wxcomponents/@vant/weapp/radio-group/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-tag": "wxcomponents/@vant/weapp/tag/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-field": "wxcomponents/@vant/weapp/field/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-toast": "wxcomponents/@vant/weapp/toast/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-switch": "wxcomponents/@vant/weapp/switch/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-divider": "wxcomponents/@vant/weapp/divider/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-action-sheet": "wxcomponents/@vant/weapp/action-sheet/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-dialog": "wxcomponents/@vant/weapp/dialog/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-swipe-cell": "wxcomponents/@vant/weapp/swipe-cell/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-index-bar": "wxcomponents/@vant/weapp/index-bar/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-index-anchor": "wxcomponents/@vant/weapp/index-anchor/index"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"van-loading": "wxcomponents/@vant/weapp/loading/index"<span style="color: rgba(0, 0, 0, 1)">
    }</span></pre>
</div>
<p>&nbsp;</p>
<h3 id="3-页面中使用引入的ui组件">3. 页面中使用引入的UI组件</h3>
<h3>在App.Vue文件中style部分引入UI组件库</h3>
<div class="cnblogs_code">
<pre>&lt;script lang="ts"&gt;<span style="color: rgba(0, 0, 0, 1)">
    export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
      onLaunch: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
            console.log(</span>'App Launch'<span style="color: rgba(0, 0, 0, 1)">)
      },
      onShow: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
            console.log(</span>'App Show'<span style="color: rgba(0, 0, 0, 1)">)
      },
      onHide: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
            console.log(</span>'App Hide'<span style="color: rgba(0, 0, 0, 1)">)
      }
    }
</span>&lt;/script&gt;

&lt;style&gt;<span style="color: rgba(0, 0, 0, 1)">
    @import </span>"/wxcomponents/@vant/weapp/common/index.wxss"<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)">每个页面公共css </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
&lt;/style&gt;</pre>
</div>
<p>然后就可以愉快的开始 用ts 和 vant啦</p>
<h4><code class="language-css hljs">BOOM shaka laka la 哈哈, 开始你的uniapp TS&nbsp; 之旅吧&nbsp;</code></h4>
<p>面对疾风吧</p><br><br>
来源:https://www.cnblogs.com/yf-html/p/12975355.html
頁: [1]
查看完整版本: uni-app 创建typescript 项目 并且引入 vant