国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 微信小程式 微信開發(fā) 使用require.js+vue開發(fā)微信上傳圖片元件方法

使用require.js+vue開發(fā)微信上傳圖片元件方法

Mar 25, 2017 am 11:19 AM
微信開發(fā)

這篇文章主要為大家詳細(xì)介紹了require.js+vue+vue-router+vue-resource開發(fā)微信上傳圖片元件,具有一定的參考價值,有興趣的夥伴們可以參考一下

由於專案是thinkPHP做後端框架,一直以來都是多頁的後端路由,想用火熱的webpack有點無從下手(原諒我太菜,而且推廣vue只有我一個人…),沒辦法,想把vue用起來,唯有在原來的基礎(chǔ)上改進(jìn)。使用webpack的巨大好處就是可以使用 .vue 這樣的單文件來寫vue元件,這樣每一個元件就是一個 .vue 文件,哪裡用上這個元件就引入進(jìn)來,維護(hù)起來確實很爽。然而一直以來專案用的都是require.js,那又想以這樣的形式來組織vue元件,還要加上vue-router和vue-resource,怎麼破?這篇文章以開發(fā)微信上傳圖片元件為範(fàn)例小結(jié)一下require.js+vue+vue-router+vue-resource的開發(fā)流程。

用require.js組織你的元件
我們會有一個components目錄去放我們的各個元件,每個元件有用自己名字命名的資料夾,像是這次的範(fàn)例album元件,裡面就放著這個元件的html、js、css,具體怎麼用require.js去載入html和css,大家百度一下把相關(guān)外掛程式下載下來即可。於是該元件的js中就可以在define裡把相關(guān)的依賴都加載進(jìn)去,最後把元件return出去,別的元件也可以透過define載入這個元件,這也達(dá)到了模組化管理元件的目的了。

使用require.js+vue開發(fā)微信上傳圖片元件方法

這裡的話,我總結(jié)了一個使用require.js寫vue元件的模板,使用WebStorm把這個模板加上去,每次寫元件的時候打幾個字就把模板生成出來,不要太爽! (componentName是模板的變量,模板生成出來你填上你的組件名字就可以)


#
define(["vue","text!../js/lib/components/$componentName$/index.html","css!../js/lib/components/$componentName$/index.css"],function (Vue,Template) {
 // 這里是模塊的代碼
 var $componentName$ = Vue.extend({
  template : Template,
  props : [],
  data : function() {
   return {

   }
  },
  // 在編譯結(jié)束和 $el 第一次插入文檔之后調(diào)用
  ready : function() {

  },
  // 在開始銷毀實例時調(diào)用。此時實例仍然有功能。
  beforeDestroy : function() {

  },
  methods : {

  },
  events : {

  }
 });
 return $componentName$;
});

總體預(yù)覽這個例子
為了示範(fàn)完整的流程,我把這個範(fàn)例做成一個小單頁叫show-album,就兩個頁面:
1.首頁叫main-page

使用require.js+vue開發(fā)微信上傳圖片元件方法


#2.詳情頁叫detail-page

使用require.js+vue開發(fā)微信上傳圖片元件方法

詳情頁裡的功能有:

接收父元件傳過來的參數(shù)進(jìn)行上傳圖片組件的初始化
點擊每張圖片右上角的叉叉可以刪除圖片
點擊最後那個小相機(jī)圖案調(diào)用微信”從手機(jī)相冊中選圖接口”,用戶可以在自己手機(jī)上選圖
選完圖片後,圖片按比例調(diào)整尺寸變成如圖所示那樣的縮圖
點擊相應(yīng)的圖片調(diào)用微信“預(yù)覽圖片接口”進(jìn)行圖片預(yù)覽

當(dāng)圖片等於最大圖片數(shù)時,最後那個小相機(jī)圖案消失

暴露出兩個方法供別的組件調(diào)用①上傳圖片方法(上傳到微信伺服器並執(zhí)行上傳成功後的回調(diào))uploadImage ②獲取所有圖片資訊方法,包括初始化相簿、刪除過的、新增的圖片資訊getAllImgInfo

OK,介紹完畢,現(xiàn)在正式開始!
一.使用vue-router做路由,搭建show-album.js

整個函式叫show-album,所以這個函式的js我們就改名為show-album. js,這個js的結(jié)構(gòu)是這樣:

define(["vue","vueResource","vueRouter","vAlbum"],function (Vue,VueResource,VueRouter,Album) {
  // 安裝資源模塊
  Vue.use(VueResource);
  // 安裝路由模塊
  Vue.use(VueRouter);
  // jquery在執(zhí)行post請求時,會設(shè)置Content-Type為application/x-www-form-urlencoded,
  // 所以服務(wù)器能夠正確解析,而使用原生ajax請求時,如果不顯示的設(shè)置Content-Type,那么默認(rèn)是text/plain,
  // 這時服務(wù)器就不知道怎么解析數(shù)據(jù)了,所以才只能通過獲取原始數(shù)據(jù)流的方式來進(jìn)行解析請求數(shù)據(jù)。
  // 由于vue是使用原生POST,所以要設(shè)置一下服務(wù)器才能正確解釋POST過去的數(shù)據(jù)
  Vue.http.options.emulateJSON = true;
  //定義mainPage頁面
  var mainPage = Vue.extend({
   template : "#main-page-temp"
  })
  //定義detailPage頁面
  var detailPage = Vue.extend({
   template : "#detail-page-temp",
   components : {
    'album' : Album
   }
  })
  // 根組件
  var showAlbum = Vue.extend({
   components : {
    'main-page' : mainPage,
    'detail-page' : detailPage
   }
  })
  // 實例化路由
  var router = new VueRouter();
  // 配置路由
  router.map({
   '/main-page' : {
    name : 'mainPage',
    component: mainPage
   },
   //這里使用路由的動態(tài)片段
   '/detail-page/:inspection_id/:image_type' : {
    name : 'detailPage',
    component : detailPage
   }
  });
  router.redirect({
   // 重定向任意未匹配路徑到 /home
   '*': '/main-page'
  });
  // 啟動應(yīng)用
  // 路由器會創(chuàng)建一個實例,并且掛載到選擇符匹配的元素上。
  router.start(showAlbum, '#show-album'); 
});

HTML那邊就很簡單了:

<template id="main-page-temp">
 <group>
  <cell v-for="list in lists"
     title="測試" value="點擊"
     is-link
     v-link="{&#39;name&#39;:&#39;detailPage&#39;,params: { &#39;inspection_id&#39;: list.inspection_id,&#39;image_type&#39; : list.image_type }}">
  </cell>
 </group>
</template>

<template id="detail-page-temp">
  <album v-ref:album :img-srcs="initImgSrcs" ></album>
  <button style="width: 100%;margin-top: 20px"
  點擊我觸發(fā)getAllImgInfo方法
  </button>
</template>

<p id="show-ablum">
 <!-- 路由外鏈 -->
 <router-view></router-view>
</p>

現(xiàn)在點擊主頁上的一條記錄,就可以跳到詳情頁,在詳情頁後退,就會回到主頁了。這樣整體結(jié)構(gòu)就完成了。
二.開發(fā)微信上傳圖片元件

具體的程式碼就不羅列出來了,我們就按照上面的元件功能清單,說每個功能如何完成

1.接收父元件傳過來的參數(shù)進(jìn)行上傳圖片元件的初始化

首先,子元件中設(shè)定好props

props : {
 //初始化有無照片
 imgSrcs : {
  type : Array,
  default : []
 },
 //是否可編輯 默認(rèn)true
 canEdit : {
  type : Boolean,
  default : true
 },
 //最大上傳數(shù) 默認(rèn)9
 maxNum : {
  type : Number,
  default : 9
 },
 //上傳后的回調(diào)
 afterUpload : {
  type : Function
 }
}

然後在父組件中使用子組件時把參數(shù)傳進(jìn)去即可


<album v-ref:album 
:img-srcs="initImgSrcs" 
:canEdit="true"
:afterUpload="afterUploadFunction"
>
</album>

2.點擊最後那個小相機(jī)圖案調(diào)用微信”從手機(jī)相冊中選圖接口” ,使用者可以在自己手機(jī)上選圖###在小相機(jī)圖案的html中綁定chooseImage方法@click=”chooseImage”###
<span class="add-img-icon">
  <img  src="/static/imghw/default1.png"  data-src="/cms/tpl/Index/Public/Home/source/image/camera.png"  class="lazy"   @click="chooseImage" alt="使用require.js+vue開發(fā)微信上傳圖片元件方法" >
 </span>

然后在methods中添加該方法,通過wx.chooseImage請求微信選擇圖片接口。使用微信js-sdk前需要配置,所以我們在組件的ready時就進(jìn)行配置即可。

ready : function() {
   //配置微信JS-SDK
   this.getSignPackage();
  },
methods : {
 chooseImage : function () {
  var _this = this;
  wx.chooseImage({
   count: _this.maxNum - _this.albums.length, // 默認(rèn)9
   sizeType: [&#39;original&#39;, &#39;compressed&#39;], // 可以指定是原圖還是壓縮圖,默認(rèn)二者都有
   sourceType: [&#39;album&#39;, &#39;camera&#39;], // 可以指定來源是相冊還是相機(jī),默認(rèn)二者都有
   success: function (res) {
    var _localIds = res.localIds;
    //記錄新增照片信息
    for (var i = 0,len = _localIds.length;i < len;i ++) {
     _this.newImagesCache.push(_localIds[i]);
    }
    //按比例生成縮略圖
    _this.renderImage(_localIds);
   }
  });
 }
}

3.選完圖片后,圖片按比例調(diào)整尺寸變成如圖所示那樣的縮略圖
這里要使用到圖片預(yù)處理,即var img = new Image ();通過實例化一個Image實例去獲取原圖的尺寸,我們才可以根據(jù)這個原圖尺寸去計算出相應(yīng)的等比例縮略圖。具體是這樣:

var img = new Image();
var $albumSingle = "";
//這里的順序是先new Image(),然后執(zhí)行img.src,完了之后圖片才算裝載完成
//這樣最后才會調(diào)用onload方法
img.onload = function() {
 albumsData = {
  localId : imgSrcs[i],
  albumSingleStyle : {height : imgWrapWidth + "px"},
  //compressImage是壓縮圖片的方法,將這個圖片實例以及圖片父元素的寬度傳進(jìn)去來計算。
  imgElementStyle : _this.compressImage(img,imgWrapWidth)
 };
 _this.albums.push(albumsData);
};
img.src = imgSrcs[i];

特別注意的一個地方:由于每張圖片的都有自己的尺寸樣式,所以我們要在組件的data選項中添加一個albums的數(shù)據(jù)作為照片的數(shù)據(jù)集,里面包含每張照片自己的路徑與樣式,這樣循環(huán)渲染每張圖片時,才會每張圖片對應(yīng)自己的屬性。還有就是,因為相同的圖片可以重復(fù)上傳,所以循環(huán)時要加上track-by=”$index”

//每張圖片自己的屬性
albumsData = {
 localId : imgSrcs[i],
 albumSingleStyle : {height : imgWrapWidth + "px"},
 //compressImage是壓縮圖片的方法,將這個圖片實例以及圖片父元素的寬度傳進(jìn)去來計算。
 imgElementStyle : _this.compressImage(img,imgWrapWidth)
};
//將每張圖片的屬性都放到albums數(shù)據(jù)集里
_this.albums.push(albumsData);

4.點擊相應(yīng)的圖片調(diào)用微信“預(yù)覽圖片接口”進(jìn)行圖片預(yù)覽使用require.js+vue開發(fā)微信上傳圖片元件方法

在圖片中綁定點擊事件,傳入該圖片的索引,去觸發(fā)一個方法:

previewImage : function (index) {
 var _albums = this.albums;
 var urls = this.getLocalIds(_albums);
 wx.previewImage({
  current: urls[index], // 當(dāng)前顯示圖片的http鏈接
  urls: urls   // 需要預(yù)覽的圖片http鏈接列表
});

5.點擊每張圖片右上角的叉叉可以刪除圖片
這個在叉上綁定點擊事件,這個事件去處理刪除圖片。

deleteImage方法,由于要記錄下用戶刪除了哪些初始化的圖片,所以要在刪除時判斷一下這張圖片是不是初始化時就有的:

deleteImage : function (index,album) {
 // 比較要刪除的照片是否在初始化照片里
 for (var i = 0,len = this.oldImagesCache.length;i < len;i ++) {
  if (album.localId === _oldImagesCache[i]) {
   this.deleteImagesList.push(_oldImagesCache[index]);
  }
 }
 this.canEdit && this.albums.$remove(album);
}

6.當(dāng)圖片等于最大圖片數(shù)時,最后那個小相機(jī)圖案消失 v-if=”albums.length

7.暴露出兩個方法供別的組件調(diào)用①上傳圖片方法(上傳到微信服務(wù)器并執(zhí)行上傳成功后的回調(diào))uploadImage ②獲取所有圖片信息方法,包括初始化相冊、刪除過的、新增的圖片信息getAllImgInfo
怎樣暴露方法供別的組件調(diào)用,這是個大問題。我也不知道怎樣做才是最佳實踐,因為做法有多種,比如子組件$dispatch,然后父組件在events里接收一下,但這樣好像很麻煩,于是我選擇了這樣做:
在子組件中使用v-rel:xxx添加該組件索引

然后在父組件里通過this.$refs.xxx.uploadImage()即可調(diào)用子組件暴露出來的方法

相關(guān)文章:

分分鐘帶你玩轉(zhuǎn)Vue.js組件

圖文詳解Vue.js開發(fā)環(huán)境快速搭建方法

使用vue.js編寫好玩的拼圖小游戲?qū)嵗a

以上是使用require.js+vue開發(fā)微信上傳圖片元件方法的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
PHP微信開發(fā):如何實作訊息加密解密 PHP微信開發(fā):如何實作訊息加密解密 May 13, 2023 am 11:40 AM

PHP是一種開源的腳本語言,廣泛應(yīng)用於網(wǎng)頁開發(fā)和伺服器端編程,尤其在微信開發(fā)中得到了廣泛的應(yīng)用。如今,越來越多的企業(yè)和開發(fā)者開始使用PHP進(jìn)行微信開發(fā),因為它成為了真正的易學(xué)易用的開發(fā)語言。在微信開發(fā)中,訊息的加密和解密是一個非常重要的問題,因為它們涉及資料的安全性。對於沒有加密和解密方式的消息,駭客可以輕鬆取得其中的數(shù)據(jù),對用戶造成威脅

PHP微信開發(fā):如何實現(xiàn)投票功能 PHP微信開發(fā):如何實現(xiàn)投票功能 May 14, 2023 am 11:21 AM

在微信公眾號開發(fā)中,投票功能經(jīng)常被運用。投票功能是讓使用者快速參與互動的好方式,也是舉辦活動和調(diào)查意見的重要工具。本文將為您介紹如何使用PHP實作微信投票功能。在取得微信公眾號授權(quán)首先,你需要取得微信公眾號的授權(quán)。在微信公眾平臺上,你需要設(shè)定微信公眾號碼的api地址、官方帳號和公眾號碼對應(yīng)的token。在我們使用PHP語言開發(fā)的過程中,我們需要使用微信官方提供的PH

用PHP開發(fā)微信群發(fā)工具 用PHP開發(fā)微信群發(fā)工具 May 13, 2023 pm 05:00 PM

隨著微信的普及,越來越多的企業(yè)開始將其作為行銷工具。而微信群發(fā)功能,則是企業(yè)進(jìn)行微信行銷的重要手段之一。但是,如果只依靠手動發(fā)送,對於行銷人員來說是一件極為費時費力的工作。所以,開發(fā)一款微信群發(fā)工具就顯得格外重要。本文將介紹如何使用PHP開發(fā)微信群發(fā)工具。一、準(zhǔn)備工作開發(fā)微信群發(fā)工具,我們需要掌握以下幾個技術(shù)點:PHP基礎(chǔ)知識微信公眾平臺開發(fā)開發(fā)工具:Sub

PHP微信開發(fā):如何實現(xiàn)客服聊天視窗管理 PHP微信開發(fā):如何實現(xiàn)客服聊天視窗管理 May 13, 2023 pm 05:51 PM

微信是目前全球用戶規(guī)模最大的社群平臺之一,隨著行動網(wǎng)路的普及,越來越多的企業(yè)開始意識到微信行銷的重要性。在進(jìn)行微信行銷時,客服服務(wù)是至關(guān)重要的一環(huán)。為了更好地管理客服聊天窗口,我們可以藉助PHP語言進(jìn)行微信開發(fā)。一、PHP微信開發(fā)簡介PHP是一種開源的伺服器端腳本語言,廣泛用於Web開發(fā)領(lǐng)域。結(jié)合微信公眾平臺提供的開發(fā)接口,我們可以使用PHP語言進(jìn)行微信

PHP微信開發(fā):如何實現(xiàn)使用者標(biāo)籤管理 PHP微信開發(fā):如何實現(xiàn)使用者標(biāo)籤管理 May 13, 2023 pm 04:31 PM

在微信公眾號開發(fā)中,使用者標(biāo)籤管理是一個非常重要的功能,可以讓開發(fā)者更了解和管理自己的使用者。本篇文章將介紹如何使用PHP實作微信使用者標(biāo)籤管理功能。一、取得微信用戶openid在使用微信用戶標(biāo)籤管理功能之前,我們首先需要取得用戶的openid。在微信公眾號開發(fā)中,透過使用者授權(quán)的方式取得openid是比較常見的做法。在使用者授權(quán)完成後,我們可以透過以下程式碼取得用

PHP微信開發(fā):如何實作群發(fā)訊息傳送記錄 PHP微信開發(fā):如何實作群發(fā)訊息傳送記錄 May 13, 2023 pm 04:31 PM

隨著微信成為了人們生活中越來越重要的通訊工具,其敏捷的訊息傳遞功能迅速受到廣大企業(yè)和個人的青睞。對企業(yè)而言,將微信發(fā)展為一個行銷平臺已經(jīng)成為趨勢,而微信開發(fā)的重要性也逐漸凸顯。在其中,群發(fā)功能更是被廣泛使用,那麼,作為PHP程式設(shè)計師,如何實現(xiàn)群發(fā)訊息發(fā)送記錄呢?以下將為大家簡單介紹一下。 1.了解微信公眾號相關(guān)開發(fā)知識在了解如何實現(xiàn)群發(fā)訊息發(fā)送記錄之前,我

使用PHP實現(xiàn)微信公眾號開發(fā)的步驟 使用PHP實現(xiàn)微信公眾號開發(fā)的步驟 Jun 27, 2023 pm 12:26 PM

如何使用PHP實現(xiàn)微信公眾號開發(fā)微信公眾號已經(jīng)成為了許多企業(yè)推廣和互動的重要管道,而PHP作為常用的Web語言,也可以用來進(jìn)行微信公眾號的開發(fā)。本文將介紹使用PHP實現(xiàn)微信公眾號開發(fā)的具體步驟。第一步:取得微信公眾號的開發(fā)者帳號在開始微信公眾號開發(fā)之前,需要先去申請一個微信公眾號的開發(fā)者帳號。具體的註冊流程可參考微信公眾平臺的官方網(wǎng)

如何使用PHP進(jìn)行微信開發(fā)? 如何使用PHP進(jìn)行微信開發(fā)? May 21, 2023 am 08:37 AM

隨著網(wǎng)路和行動智慧型裝置的發(fā)展,微信成為了社交和行銷領(lǐng)域不可或缺的一部分。在這個越來越數(shù)位化的時代,如何使用PHP進(jìn)行微信開發(fā)已經(jīng)成為了許多開發(fā)者的關(guān)注點。本文主要介紹如何使用PHP進(jìn)行微信發(fā)展的相關(guān)知識點,以及其中的一些技巧和注意事項。一、開發(fā)環(huán)境準(zhǔn)備在進(jìn)行微信開發(fā)之前,首先需要準(zhǔn)備好對應(yīng)的開發(fā)環(huán)境。具體來說,需要安裝PHP的運作環(huán)境,以及微信公眾平臺提

See all articles