最近在學習阿里的weex框架,網上教程真是不少,但是有用的確實是少的很。其中大多數都是講如何配置移動端的,很少有講到weex語法的。要知道,如果真需要用weex編寫js頁面的話,很有可能是移動端開發者自己去編寫(iOS&&Android)。只知道配置環境,不知道如何編寫js頁面基本上和沒學沒什麼兩樣的。
所以下面整理一些學習weex時看到的好的學習資料,其中我重點記錄一下js頁面跳轉路徑的問題。ps:這個問題好像還和css相對路徑有點區別。
1.相關學習的文件
1.1官方文件中文版網址:http://www.shouce.ren/api/view/a/11623
開發可以使用we或者vue進行,建議使用vue,推薦文件(we和vue的語法區別):http://weex-project.io/cn/references/migration/difference.html
其中可能不是特別全,但是還是比較系統的,建議從頭到尾研究一遍,同時配合官方的Demo敲一遍(不敲程式碼就不會知道其中的坑有多深)。
1.2下面是官方Demo的網址:https://github.com/alibaba/weex/tree/dev
專案中沒有pod第三方框架,開啟專案,cd到iOS(Android)的根目錄,執行:pod install。
開啟專案配置相應的庫檔案就可以執行了。
1.3工具建議用webstorm,網上有很多配置的文章,很簡單配置。(不建議用Sublime,太輕量級了)
2.weex中的路徑問題。
2.1絕對路徑:http://192.168.1.1:8080/......
這種方法簡單直觀,不過當伺服器地址更換的時候如果所有的js頁面都是絕對地址,需要一個個更換,你去找吧,這可是很大的工作量哦。
2.2我講述一下個人認為比較簡單方便的一種方法,這是官方Demo中的一種方法:
var bundleUrl = this.$getConfig().bundleUrl;
bundleUrl = new String(bundleUrl);
console.log('baseurl-01',bundleUrl);
這幾句程式碼獲取當前的js的地址,可以是從伺服器動態獲取的js(http...型別),也可以是本地js檔案(js檔案放在app路徑下)。
var isAndroidAssets = bundleUrl.indexOf('file://assets/') >= 0;
var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
iOS端的js檔案地址型別為file:///...........專案名稱.app/........
安卓端的js檔案地址型別為file://assets/.........
注意:<js/weex/helloweex.js>
1.比如說js資料夾下面全都是js檔案型別(其中有子資料夾包含js檔案),我們把js放到專案中時,這時在app內部js資料夾和子資料夾全都沒有了,也就是說js資料夾內所有的js檔案同級放在了專案.app路徑下。(iOS端是這樣,安卓的檔案型別我不清楚。)
2.由於1的原因,ios端在呼叫本地js檔案時,拼接路徑不需要加js或者子資料夾的名稱。
3.伺服器型別的js檔案地址拼接的時候有子資料夾需要新增的。
下面是we檔案拼接地址的Demo,適應於本地js檔案,伺服器端檔案,具體含義,上面分析的差不多了,自己去寫個小Demo測試
幾遍就熟悉了。(伺服器端,本地檔案都測試一下)
var bundleUrl = this.$getConfig().bundleUrl;
bundleUrl = new String(bundleUrl);
console.log('baseurl-01',bundleUrl);
var nativeBase;
var isAndroidAssets = bundleUrl.indexOf('file://assets/') >= 0;
var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
if (isAndroidAssets) {
nativeBase = 'file://assets/';
console.log('baseurl---android ---',nativeBase);
}
else if (isiOSAssets) {
// file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
// file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
nativeBase = bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
console.log('baseurl---ios ---',nativeBase);
}
else {
var host = 'localhost:8080';
var matches = /\/\/([^\/]+?)\//.exec(this.$getConfig().bundleUrl);
if (matches && matches.length >= 2) {
host = matches[1];
}
nativeBase = 'http://' + host + '/' + this.dir + '/navigator/';
console.log('baseurl--host---',nativeBase);
}
var h5Base = bundleUrl;
// in Native
var base = nativeBase;
if (typeof window == 'object') {
// in Browser or WebView
//base = h5Base;
}
this.url = base+'navigator.js';
console.log('baseurl-lastbase----',this.url);
3.控制檯輸出的問題
比如we檔案下這一句程式碼,我本來做iOS的,始終沒搞明白怎麼看的列印的資訊。最後神來之筆一下想到了一個方法,
然後百度iOS埠又找到另一個方法。
console.log('baseurl-lastbase----',this.url);
方法1:執行終端命令:weex helloweex.we 這時頁面會出現在瀏覽器中,開啟web控制檯,你就可以看到log資訊了。
方法2:iOS端設定[WXLog setLogLevel:WXLogLevelError];其中WXLogLevelError不同型別可以列印不同的log資訊哦。
4.we/vue 轉換成 js檔案的終端命令
weex compile we js //會將we資料夾下的所有we檔案轉換到js資料夾下
weex compile dir/xxx.we js //會將dir資料夾下的xxx.we檔案轉換為js檔案存到js資料夾下
weex compile dir/xxx.vue js //會將dir資料夾下的xxx.vue檔案轉換為js檔案存到js資料夾下