幾種比較常用的參數(shù)傳遞方式。
1、通過route傳遞
這種方法是在新建tabs類型的ionic項(xiàng)目中就使用到的。
在route中定義了,進(jìn)入頁面的路由接收參數(shù)
在界面中傳遞參數(shù)
或者在controller中使用代碼傳遞參數(shù)
$state.go('game-detail',{gameId:gameId})
都可是實(shí)現(xiàn)從A界面向B界面?zhèn)鬟f一個(gè)字符串類型的數(shù)據(jù),同樣的方法:/xxxx:/xxxx:/xxx就可以實(shí)現(xiàn)向B界面?zhèn)鬟f多個(gè)字符串參數(shù)。
優(yōu)點(diǎn)是代碼簡單,傳遞數(shù)據(jù)通過分享鏈接返回,數(shù)據(jù)不會(huì)丟失。
缺點(diǎn)是將數(shù)據(jù)放到url地址中,使得訪問地址過長。若傳遞多個(gè)參數(shù)。在微信分享地址放回是可能導(dǎo)致重定向地址錯(cuò)誤。
切忌使用這個(gè)方法傳遞對(duì)象,雖然可以實(shí)現(xiàn),但是會(huì)有一個(gè)非常長的url地址。
2、通過$rootScope傳遞參數(shù)
這個(gè)更簡單點(diǎn),在A、B界面中注入$rootScope,在A界面使用$rootScope.data={xxx:xxx}||"xxxx".在B界面直接使用$rootScope.data
優(yōu)點(diǎn)是使用便捷,高效快速,不止能傳遞字符串還能傳遞對(duì)象。在需要傳遞較大數(shù)據(jù)量時(shí),挺好用的。
缺點(diǎn)是代碼隨意,不規(guī)范,到處都是全局變量不好維護(hù),數(shù)據(jù)常駐內(nèi)存占用空間。數(shù)據(jù)保存在本地通過分享鏈接返回?cái)?shù)據(jù)丟失。
這個(gè)方法不止可以用來傳遞參數(shù),活用于公共業(yè)務(wù)和公共模塊的處理,也非常好用。
但是切忌過于依賴,這個(gè)技巧,不然把大量的代碼寫在run中,會(huì)影響項(xiàng)目的啟動(dòng)。
比如通用的loading,可以寫在這里,只要項(xiàng)目啟動(dòng)了這兩個(gè)模塊就加載了。
然后再需要的地方$rootScope.$broadcast('loading:show');就可以了。同樣的在這里定義$rootScope.fun = func(),也可在全局調(diào)用$rootScope.fun()
注意切忌把太多的業(yè)務(wù)放在這里,后期代碼調(diào)整和業(yè)務(wù)修改,真的很悲催。
3、通過service傳遞和方法2差不多,就是需要多謝一下代碼,優(yōu)缺點(diǎn)也類似。但是比方法2更加的規(guī)范,符合angularjs的設(shè)計(jì)規(guī)范,
不在controller中處理業(yè)務(wù),而是交由服務(wù)處理。就是A界面引用C服務(wù)的setData,B界面引用C服務(wù)的getData。
最好的方法,忘記說了,通過route傳遞一個(gè)key,然后需要服務(wù)端配合。通過這個(gè)key去獲取整個(gè)對(duì)象數(shù)據(jù),這樣子,不管是分享回來沒數(shù)據(jù)還是url過長,都可以決解