每一帧都是褪色的自己 發表於 2019-9-16 07:44:00

如何学习uni-app?

<p><img src="https://img2018.cnblogs.com/blog/1434670/201909/1434670-20190916074343045-279113584.jpg" alt="file" loading="lazy"></p>
<p><img src="https://img2018.cnblogs.com/blog/1434670/201909/1434670-20190916074344134-1779585505.jpg" alt="file" loading="lazy"></p>
<p><img src="https://img2018.cnblogs.com/blog/1434670/201909/1434670-20190916074344446-755990230.jpg" alt="file" loading="lazy"></p>
<p><img src="https://img2018.cnblogs.com/blog/1434670/201909/1434670-20190916074345182-1126989124.jpg" alt="file" loading="lazy"></p>
<p><img src="https://img2018.cnblogs.com/blog/1434670/201909/1434670-20190916074346205-879308096.jpg" alt="file" loading="lazy"></p>
<p><img src="https://img2018.cnblogs.com/blog/1434670/201909/1434670-20190916074347589-504214513.jpg" alt="file" loading="lazy"></p>
<p>uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架。</p>
<p>开发者通过编写 Vue.js 代码,uni-app 将其编译到iOS、Android、微信小程序、H5等多个平台,保证其正确运行并达到优秀体验。<br>
<img src="https://img2018.cnblogs.com/blog/1434670/201909/1434670-20190916074349636-785122093.jpg" alt="file" loading="lazy"></p>
<pre><code>&lt;template&gt;
&lt;view class="content"&gt;
&lt;/view&gt;
&lt;/template&gt;
&lt;script&gt;
export default {
data: {
}
}
&lt;/script&gt;
</code></pre>
<pre><code>methods: {
openinfo() {
var newsid = e.currentsTarget.dataset.newsid;
        uni.navigateTo({
       url: '../info/info?newsid='+newsid
        })
}
}
</code></pre>
<pre><code>export defaults {
onLoad: function(e){
uni.request({
       url: ''+e.newsid,
       method: 'GET',
       data: {},
       success: res =&gt; {
       }
       fail: () =&gt; {},
       complete: () =&gt; {}
        })
}
}
</code></pre>
<pre><code>&lt;template&gt;
&lt;view class="content"&gt;
&lt;view class="title"&gt;&lt;/view&gt;
&lt;/view&gt;
&lt;/template&gt;

&lt;rich-text class="richTest" :nodes="strings"&gt;&lt;/rich-text&gt;
</code></pre>
<p><img src="https://img2018.cnblogs.com/blog/1434670/201909/1434670-20190916074351048-911572738.jpg" alt="file" loading="lazy"></p>
<p><img src="https://img2018.cnblogs.com/blog/1434670/201909/1434670-20190916074351852-489219830.jpg" alt="file" loading="lazy"></p>
<h1 id="列表">列表</h1>
<p>返回数据格式<br>
post_id 新闻id<br>
title 标题<br>
created_at 创建时间<br>
author_avatar 图标</p>
<p>详情<br>
地址:</p>
<pre><code>https://unidemo.dcloud.net.cn/api/news/36kr/ + id
</code></pre>
<p>使用rich-text来展示新闻内容</p>
<pre><code>&lt;rich-text class="richText" :nodes="strings"&gt;&lt;/rich-text&gt;
</code></pre>
<p>2018年,uni-app,Dcloud推出uni-app,下载了官方提供的hello示例教程</p>
<p>空白的项目要拷贝uni.css和uni.js,保存到common目录<br>
打开pages.json将文件中的navigationBarTitleText</p>
<p>v-for表示要循环的语句<br>
@tap表示绑定点击事件<br>
:data-postid表示绑定一个动态的数据<br>
而postid表示这个动态的数据属性是这个名字</p>
<p>编写js代码的时候,编译器会自动用eslint对代码进行检查<br>
onLoad是页面的生命周期</p>
<pre><code>&lt;template&gt;
&lt;view class="content"&gt;
&lt;view class="uni-list"&gt;
       &lt;view class="uni-list-cell" hover-class="uni-list-cell-hover" v-for="(item,index) in news" :key="index" @tap="opennews" :data-postid="item.post_id"&gt;
       &lt;view class="uni-media-list"&gt;
          &lt;image class="uni-media-list-logo" :src="item.author_avatar"&gt;&lt;/image&gt;
                &lt;view class="uni-media-list-body"&gt;
               &lt;view class="uni-media-list-text-top"&gt;{{item.title}}&lt;/view&gt;
               &lt;view class="uni-media-list-text-bottom uni-ellipsis"&gt;{{item.created_at}}&lt;/view&gt;
               &lt;/view&gt;
                &lt;/view&gt;
        &lt;/view&gt;
&lt;/view&gt;
&lt;/view&gt;
&lt;/template&gt;

&lt;script&gt;
export default {
data() {
       return {
          news: []
        };
        },
        onLoad: function() {
       uni.request({
          url: 'https://',
                method: 'GET',
                data: {},
                success: res =&gt; {
               this.news = res.data;
                },
                fail: () =&gt; {},
                complete: () =&gt; {}
                });
        },
        methods: {
       opennews(e){
          uni.navigateTo({
               url: '../news/new?postid='+e.currentTarget.dataset.postid
               });
                }
                }
        }
&lt;/script&gt;
&lt;style&gt;
.uni-media-list-body{height:auto;}
.uni-media-list-text-top{line-height: 1.6em;}
&lt;/style&gt;
</code></pre>
<pre><code>&lt;template&gt;
    &lt;view class="wrap"&gt;
      &lt;view class="title"&gt;
            {{title}}
      &lt;/view&gt;
      &lt;view class="content"&gt;
            &lt;rich-text :nodes="content"&gt;&lt;/rich-text&gt;
      &lt;/view&gt;
    &lt;/view&gt;
&lt;/template&gt;

&lt;script&gt;
    export default {
      data() {
            return {
                title: '',
                content: ''
            };
      },
      onLoad:function(e){
            uni.request({
                url: 'https://'+ e.postid,
                method: 'GET',
                data: {},
                success: res =&gt; {
                  this.title = res.data.title;
                  this.content = res.data.content;
                },
                fail: () =&gt; {},
                complete: () =&gt; {}
            });
      }
    }
&lt;/script&gt;

&lt;style&gt;
    .wrap{padding: 10upx 2%;width: 96%;flex-wrap: wrap;}
    .title{line-height: 2em;font-weight: bold;font-size: 40upx;}
    .content{line-height: 2em;}
&lt;/style&gt;
</code></pre>
<p>网页大多是b/s<br>
服务端代码混合在页面里<br>
现在是c/s</p>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
      &lt;meta charset="utf-8" /&gt;
      &lt;title&gt;&lt;/title&gt;
      &lt;script type="text/javascript"&gt;

      &lt;/script&gt;
      &lt;style type="text/css"&gt;

      &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;

    &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<pre><code>&lt;template&gt;
    &lt;view&gt;

    &lt;/view&gt;
&lt;/template&gt;

&lt;script&gt;
    export default {

    }
&lt;/script&gt;

&lt;style&gt;

&lt;/style&gt;
</code></pre>
<pre><code>&lt;script&gt;
var util = require('../../../common/util.js');//require这个js模块
var formatedPlayTime = util.formatTime(playTime); //调用js模块的方法
&lt;/script&gt;
</code></pre>
<pre><code>function formatTime(time) {
    return time;//这里没写逻辑
}

module.exports = {
    formatTime: formatTime
}
</code></pre>
<pre><code>var dateUtils = require('../../../common/util.js').dateUtils;
import * as echarts from '/components/echarts.simple.min.js';
</code></pre>
<pre><code>&lt;style&gt;
@import "./common/uni.css";
.uni-hello-text {
color: #7A7E83;
        }
&lt;/style&gt;
</code></pre>
<p>导入一个角标的组件库</p>
<pre><code>&lt;template&gt;
&lt;view&gt;
&lt;uni-badge text="abc" :inverted="true"&gt;&lt;/uni-badge&gt;
&lt;/view&gt;
&lt;/template&gt;

&lt;script&gt;
import uniBadge from '../../../components/uni-badge.vue";
export default {
data() {
       return {
       }
        },
        components: {
       uniBadge
        }
}
&lt;/script&gt;
</code></pre>
<pre><code>// main.js
import pageHead from './components/page-head.vue' // 导入
Vue.component('page-head', pageHead)
</code></pre>
<p>div改view</p>
<p>span, font 改 text</p>
<p>a 改成 navigator</p>
<p>img 改 image</p>
<p>input, form, button, checkbox, radio, label, textarea,canvas, video</p>
<p>select 改picker</p>
<p>iframe 改 web-view</p>
<p>scroll-view<br>
swiper<br>
icon<br>
rich-text<br>
progress<br>
slider<br>
switch<br>
camera<br>
live-player<br>
map<br>
cover-view</p>
<p>覆盖原生组件,在map上加个遮罩,则需要使用cover-view组件</p>
<p>js变化,分为运行环境变化,数据绑定模式变化,api<br>
浏览器中的js是w3c组织基于js规范补充了window、document、navigator、location等专用对象。</p>
<pre><code>&lt;html&gt;
&lt;head&gt;
&lt;script type="text/javascript"&gt;
       document.addEventListener("DOMContentLoaded",function(){
          document.getElementById("spana").innerText="456"
       })
       function changtextvalue() {
          document.getElementById("spana").innerText="789"
       }
       &lt;/script&gt;
        &lt;/head&gt;
        &lt;body&gt;
       &lt;span id="spana"&gt;123&lt;/span&gt;
       &lt;button type="button onclick="changetextvalue()"&gt;111&lt;/button&gt;
       &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<pre><code>&lt;template&gt;
&lt;view&gt;
&lt;text&gt;{{textvalue}}&lt;/text&gt;
        &lt;button :type="buttontype" @click="changetextvalue()"&gt;&lt;/button&gt;
        &lt;/view&gt;
&lt;/template&gt;
&lt;script&gt;
export default{
data() {
return {
textvalue: "123",
        buttontype: "primary"
};
},
onLoad() {
this.textvalue="456"
},
methods: {
changetextvalue() {
this.textvalue="789"
        }
        }
}
&lt;/script&gt;
</code></pre>
<p>alert, confirm改成 uni.showmodel<br>
ajax 改成 uni.request</p>
<p>cookie, session,<br>
rem只能用于h5<br>
注意背景图和字体文件尽量不要大于40k。</p>
<h1 id="vue和微信小程序">vue和微信小程序</h1>
<p><img src="https://img2018.cnblogs.com/blog/1434670/201909/1434670-20190916074354068-1114637938.jpg" alt="file" loading="lazy"></p>
<p>小程序生命周期<br>
<img src="https://img2018.cnblogs.com/blog/1434670/201909/1434670-20190916074355006-1759567322.jpg" alt="file" loading="lazy"></p>
<p>onLoad: 页面加载<br>
一个页面只会调用一次,在onLoad中获取打开当前也迈进所调用的query参数</p>
<p>onShow页面显示<br>
每次打开页面都会调用一次</p>
<p>onReady: 页面初次渲染完成<br>
一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互</p>
<p>onHide: 页面隐藏<br>
当navigateTo或底部tab切换时调用</p>
<p>onUnload: 页面卸载<br>
当redirectTo或navigateBack的时候调用</p>
<p>vue一般会在created或者mounted中请求数据<br>
在小程序,会在onLoad或者onShow中请求数据</p>
<pre><code>&lt;img :src="imgSrc"/&gt;
&lt;image src="{{imgSrc}}"&gt;&lt;/image&gt;
</code></pre>
<pre><code>VUE
&lt;img :src="imgSrc"/&gt;
小程序
&lt;image src="{{imgSrc}}"&gt;&lt;/image&gt;
</code></pre>
<pre><code>&lt;ul id="example-1"&gt;
&lt;li v-for="item in items"&gt;
    {{ item.message }}
&lt;/li&gt;
&lt;/ul&gt;

var example1 = new Vue({
el: '#example-1',
data: {
    items: [
      { message: 'Foo' },
      { message: 'Bar' }
    ]
}
})

</code></pre>
<pre><code>&lt;ul id="example-1"&gt;
&lt;li v-for="item in items"&gt;
    {{ item.message }}
&lt;/li&gt;
&lt;/ul&gt;

var example1 = new Vue({
el: '#example-1',
data: {
    items: [
      { message: 'Foo' },
      { message: 'Bar' }
    ]
}
})

</code></pre>
<p>显示与隐藏元素</p>
<p>vue中,使用v-if 和v-show控制元素的显示和隐藏</p>
<p>小程序中,使用wx-if和hidden控制元素的显示和隐藏</p>
<pre><code>&lt;button v-on:click="counter += 1"&gt;Add 1&lt;/button&gt;
&lt;button v-on:click.stop="counter+=1"&gt;Add1&lt;/button&gt;//阻止事件冒泡
</code></pre>
<pre><code>&lt;button bindtap="noWork"&gt;明天不上班&lt;/button&gt;
&lt;button catchtap="noWork"&gt;明天不上班&lt;/button&gt;//阻止事件冒泡
</code></pre>
<pre><code>&lt;div id="app"&gt;
    &lt;input v-model="reason" placeholder="填写理由" class='reason'/&gt;
&lt;/div&gt;

new Vue({
el: '#app',
data: {
   reason:''
}
})
</code></pre>
<pre><code>&lt;div id="app"&gt;
    &lt;input v-model="reason" placeholder="填写理由" class='reason'/&gt;
&lt;/div&gt;

new Vue({
el: '#app',
data: {
   reason:''
}
})
</code></pre>
<pre><code>&lt;div id="app"&gt;
    &lt;input v-model="reason" placeholder="填写理由" class='reason'/&gt;
&lt;/div&gt;

new Vue({
el: '#app',
data: {
   reason:''
}
})
</code></pre>
<p>vue中,通过this.reason取值</p>
<p>小程序中,通过this.data.reason取值</p>
<pre><code>&lt;button @click="say('明天不上班')"&gt;&lt;/button&gt;

new Vue({
el: '#app',
methods:{
    say(arg){
    consloe.log(arg)
    }
}
})
</code></pre>
<p>通过e.currentTarget.dataset.*的方式获取</p>
<pre><code>&lt;view class='tr' bindtap='toApprove' data-id="{{item.id}}"&gt;&lt;/view&gt;
Page({
data:{
    reason:''
},
toApprove(e) {
    let id = e.currentTarget.dataset.id;
}
})
</code></pre>
<pre><code>//子组件 bar.vue
&lt;template&gt;
&lt;div class="search-box"&gt;
    &lt;div @click="say" :title="title" class="icon-dismiss"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
export default{
props:{
    title:{
       type:String,
       default:''
      }
    }
},
methods:{
    say(){
       console.log('明天不上班');
       this.$emit('helloWorld')
    }
}
&lt;/script&gt;

// 父组件 foo.vue
&lt;template&gt;
&lt;div class="container"&gt;
    &lt;bar :title="title" @helloWorld="helloWorld"&gt;&lt;/bar&gt;
&lt;/div&gt;
&lt;/template&gt;

&lt;script&gt;
import Bar from './bar.vue'
export default{
data(){
    return{
      title:"我是标题"
    }
},
methods:{
    helloWorld(){
      console.log('我接收到子组件传递的事件了')
    }
},
components:{
    Bar
}
&lt;/script&gt;

</code></pre>
<pre><code>{
"component": true
}
</code></pre>
<pre><code>"usingComponents": {
    "tab-bar": "../../components/tabBar/tabBar"
}
       
&lt;tab-bar currentpage="index"&gt;&lt;/tab-bar&gt;
</code></pre>
<pre><code>//子组件 bar.vue
&lt;template&gt;
&lt;div class="search-box"&gt;
    &lt;div @click="say" :title="title" class="icon-dismiss"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
export default{
props:{
    title:{
       type:String,
       default:''
      }
    }
},
methods:{
    say(){
       console.log('明天不上班');
       this.$emit('helloWorld')
    }
}
&lt;/script&gt;

// 父组件 foo.vue
&lt;template&gt;
&lt;div class="container"&gt;
    &lt;bar :title="title" @helloWorld="helloWorld"&gt;&lt;/bar&gt;
&lt;/div&gt;
&lt;/template&gt;

&lt;script&gt;
import Bar from './bar.vue'
export default{
data(){
    return{
      title:"我是标题"
    }
},
methods:{
    helloWorld(){
      console.log('我接收到子组件传递的事件了')
    }
},
components:{
    Bar
}
&lt;/script&gt;

</code></pre>
<pre><code>//子组件 bar.vue
&lt;template&gt;
&lt;div class="search-box"&gt;
    &lt;div @click="say" :title="title" class="icon-dismiss"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
export default{
props:{
    title:{
       type:String,
       default:''
      }
    }
},
methods:{
    say(){
       console.log('明天不上班');
       this.$emit('helloWorld')
    }
}
&lt;/script&gt;

// 父组件 foo.vue
&lt;template&gt;
&lt;div class="container"&gt;
    &lt;bar :title="title" @helloWorld="helloWorld"&gt;&lt;/bar&gt;
&lt;/div&gt;
&lt;/template&gt;

&lt;script&gt;
import Bar from './bar.vue'
export default{
data(){
    return{
      title:"我是标题"
    }
},
methods:{
    helloWorld(){
      console.log('我接收到子组件传递的事件了')
    }
},
components:{
    Bar
}
&lt;/script&gt;

</code></pre>
<pre><code>// 父组件 foo.vue
&lt;template&gt;
&lt;div class="container"&gt;
    &lt;bar :title="title"&gt;&lt;/bar&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
import Bar from './bar.vue'
export default{
data(){
    return{      
      title:"我是标题"
    }
},
components:{
    Bar
}
&lt;/script&gt;

// 子组件bar.vue
&lt;template&gt;
&lt;div class="search-box"&gt;
    &lt;div :title="title" &gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
export default{
props:{
    title:{
       type:String,
       default:''
      }
    }
}
&lt;/script&gt;
</code></pre>
<pre><code>properties: {
    // 弹窗标题
    currentpage: {            // 属性名
      type: String,   // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
      value: 'index'   // 属性初始值(可选),如果未指定则会根据类型选择一个
    }
}
       
//子组件中
methods: {   
    // 传递给父组件
    cancelBut: function (e) {
      var that = this;
      var myEventDetail = { pickerShow: false, type: 'cancel' } // detail对象,提供给事件监听函数
      this.triggerEvent('myevent', myEventDetail) //myevent自定义名称事件,父组件中使用
    },
}

//父组件中
&lt;bar bind:myevent="toggleToast"&gt;&lt;/bar&gt;

// 获取子组件信息
toggleToast(e){
    console.log(e.detail)
}
</code></pre>
<hr>
<p>若本号内容有做得不到位的地方(比如:涉及版权或其他问题),请及时联系我们进行整改即可,会在第一时间进行处理。</p>
<hr>
<h2 id="请点赞因为你们的赞同鼓励是我写作的最大动力">请点赞!因为你们的赞同/鼓励是我写作的最大动力!</h2>
<h3 id="欢迎关注达叔小生的简书">欢迎关注达叔小生的简书!</h3>
<p><strong>这是一个有质量,有态度的博客</strong></p>
<p><img src="https://img2018.cnblogs.com/blog/1434670/201909/1434670-20190916074355266-1140778145.jpg" alt="博客" loading="lazy"></p>


</div>
<div id="MySignature" role="contentinfo">
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!<br><br>
来源:https://www.cnblogs.com/dashucoding/p/11525369.html
頁: [1]
查看完整版本: 如何学习uni-app?