小程序基礎(chǔ)知識點(diǎn)

框架

小程序框架系統(tǒng)分為兩部分:視圖層(View)和邏輯層(App Service)使鹅,視圖層有自己的描述語言 wxml 和 wxss,邏輯層基于 javascript 岭埠。
小程序在邏輯層視圖層之間提供了數(shù)據(jù)傳輸和事件系統(tǒng),讓開發(fā)者能夠?qū)W⒂跀?shù)據(jù)與邏輯

響應(yīng)式的數(shù)據(jù)綁定

框架的核心是一個(gè)響應(yīng)的數(shù)據(jù)綁定系統(tǒng),它可以讓數(shù)據(jù)與視圖非常簡單地保持同步靠闭。當(dāng)需要修改的時(shí)候,只需要在邏輯層修改數(shù)據(jù)坎炼,視圖層就會做相應(yīng)的更新

頁面管理

框架管理了整個(gè)小程序的頁面路由愧膀,框架以棧的形式維護(hù)了當(dāng)前的所有頁面,可以做到頁面間的無縫切換谣光,并給以頁面完整的生命周期扇调。開發(fā)者需要做的只是將頁面的數(shù)據(jù)、方法抢肛、生命周期函數(shù)注冊到 框架 中狼钮,其他的一切復(fù)雜的操作都交由框架處理

  • getCurrentPages()用于獲取當(dāng)前頁面棧的實(shí)例,它會以數(shù)組的形式按照棧的順序排列捡絮,tip:
    • 不要嘗試修改頁面棧熬芜,會導(dǎo)致路由以及頁面狀態(tài)錯誤
    • 不要在 App.onLaunch 中調(diào)用,這個(gè)時(shí)候page還沒有生成
  • 頁面間跳轉(zhuǎn)api:
    • navigateTo:打開新頁面
    • redirectTo:重定向
    • navigateBack:返回上一級
    • switchTab:tab切換(可以且只能跳轉(zhuǎn)到tab福稳,是除reLaunch以外唯一可以跳轉(zhuǎn)到tab的)
    • reLaunch:重新加載涎拉,可以打開任意頁面
目錄結(jié)構(gòu)

小程序包含一組描述整體程序的 app 文件和多個(gè)描述各自頁面的page,描述頁面的四個(gè)文件必須具有相同的路徑與文件名的圆。
- app.json 文件用來對微信小程序進(jìn)行全局配置鼓拧,決定頁面的路徑(pages)、窗口表現(xiàn)(winidow)越妈,設(shè)置網(wǎng)絡(luò)超時(shí)事件季俩、設(shè)置多tab
- App()必須在 app.js 中調(diào)用,必須調(diào)用且只能調(diào)用一次梅掠,不然會出現(xiàn)無法預(yù)期的后果(具體是啥我也不知道酌住,官方文檔里這么寫的),App()中的聲明周期函數(shù):
+ onLaunch阎抒,小程序初始化完成時(shí)調(diào)用酪我,只會運(yùn)行一次
+ onShow,小程序啟動觸發(fā)且叁,或者從后臺進(jìn)入前臺時(shí)觸發(fā)
+ onHide都哭,從前臺進(jìn)入后臺時(shí)觸發(fā)
+ onError(不是生命周期),發(fā)生腳本錯誤,或api調(diào)用失敗觸發(fā)
+ onPageNotFound(不是生命周期)欺矫,頁面不存在時(shí)觸發(fā)

邏輯層

邏輯層使用的是 javascript 引擎纱新,將數(shù)據(jù)進(jìn)行處理發(fā)送給視圖層,也可以接收視圖層的事件反饋汇陆。最后開發(fā)者寫的所有代碼最終將會打包成一份 javascript 文件怒炸,并在小程序啟動的時(shí)候運(yùn)行,直到小程序銷毀毡代。
小程序框架的邏輯層并非運(yùn)行在瀏覽器中阅羹,因此 javascript 在 web 中一些能力都無法使用,如 window教寂,document 等

模塊化

可以將一些公共的代碼抽離成為一個(gè)單獨(dú)的js文件捏鱼,作為一個(gè)模塊。模塊需要通過 module.exports 對外暴露接口酪耕。(調(diào)用時(shí)候注意导梆,require 暫時(shí)不支持絕對路徑)

API
  • 事件監(jiān)聽 API: 約定,以 on 開頭的 API 用來監(jiān)聽某個(gè)事件是否觸發(fā)
  • 同步 API: 約定迂烁,以 Sync 結(jié)尾的 API 都是同步 API看尼,同步API 的執(zhí)行結(jié)果可以通過函數(shù)返回值直接獲取,如果執(zhí)行錯誤會拋異常盟步, try{}catch(e){console.error(e)}
WXS

WXS(WeiXin Script)是小程序的一套腳本語言藏斩,結(jié)合 WXML,可以構(gòu)建出頁面的結(jié)構(gòu)却盘。

自定義組件

自定義組件是將頁面內(nèi)的功能模塊抽象成組件狰域,以便在不同的頁面中重復(fù)使用,tip

  • 需要在 json 文件中將 component 字段定義為true黄橘,這個(gè)文件即為一個(gè)組件文件兆览,組件的 js 中不是定義 page 而是定義 component
  • 使用自定義組件,需要在要使用的頁面的 json 中引用聲明塞关,需要提供自定義組件的標(biāo)簽名和對應(yīng)的自定義組件文件路徑抬探,可以定義多個(gè),比如:
    { "usingComponents": { "component-tag-name1": "path/to/the/custom/component", "component-tag-name2": "path/to/the/custom/component" } }
  • 在組件wxss中不應(yīng)該使用ID選擇器描孟、屬性選擇器和標(biāo)簽名選擇器
  • slot:在組件的wxml中可以包含 slot 節(jié)點(diǎn)驶睦,用于承載組件使用者提供的wxml結(jié)構(gòu)。默認(rèn)情況下匿醒,一個(gè)組件的wxml中只能有一個(gè)slot。需要使用多slot時(shí)缠导,可以在組件 js 中聲明啟用:options: { multipleSlots: true }廉羔,在頁面中通過 <view slot="A"></view> 引用,在組件頁面中通過 <slot name="A"></slot> 接收
  • 組件間通信僻造?
  • 關(guān)于組件樣式:
    • 組件和引用組件的頁面不能使用id選擇器(#a)憋他、屬性選擇器([a])和標(biāo)簽名選擇器孩饼,請改用class選擇器
    • 組件和引用組件的頁面中使用后代選擇器(.a .b)在一些極端情況下會有非預(yù)期的表現(xiàn),子元素選擇器(.a>.b)只能用于 view 組件與其子節(jié)點(diǎn)之間竹挡,用于其他組件可能導(dǎo)致非預(yù)期的情況
    • 繼承樣式镀娶,如 font 、 color 揪罕,會從組件外繼承到組件內(nèi)
    • 除繼承樣式外梯码, app.wxss 中的樣式、組件所在頁面的的樣式對自定義組件無效
    • 組件中指定默認(rèn)樣式好啰,使用 :host 選擇器轩娶,比如 :host { color:#f00; }
  • 組件的生命周期:
    created、attached框往、ready鳄抒、moved、detached椰弊、error许溅,2.2.3 版本以后可以在 lifetimes 里定義,之前可在 component 里定義秉版;特殊生命周期: show贤重、hide、resize沐飘,可在 pageLifetimes 里定義
  • behaviors
其他重要知識點(diǎn)
  • 銷毀:只有當(dāng)小程序進(jìn)入后臺一定時(shí)間游桩,或者系統(tǒng)資源占用過高,才會被真正的銷毀耐朴;也可以手動刪除
  • setData:setData函數(shù)用于將數(shù)據(jù)從邏輯層發(fā)送到視圖層(異步方式)借卧,同時(shí)改變 this.data 的值(同步);tip: 如果要改變數(shù)組或?qū)ο笾心骋豁?xiàng)筛峭,比如array[2].info铐刘,需要進(jìn)行預(yù)先定義,然后使用字符串類型的值影晓,比如var arr = 'array[2].info'镰吵,然后就可以 this.setData({ arr: 'i am info' }),其他 tip:
    • 在目前版中直接使用 this.data 修改值是無效的挂签,必須使用 this.setData 才能修改data中的值
    • data中僅支持可JSON化的數(shù)據(jù)
    • 單次設(shè)置的數(shù)據(jù)不能超過1024kB疤祭,請盡量避免一次設(shè)置過多的數(shù)據(jù)
    • 請不要把 data 中任何一項(xiàng)的 value 設(shè)為 undefined,否則這一項(xiàng)將不被設(shè)置并可能遺留一些潛在問題
  • wx:if 和 hidden:wx:if 是惰性的饵婆,如果在初始渲染條件為 false勺馆,框架什么也不做,在條件第一次變成真的時(shí)候才開始局部渲染。當(dāng) wx:if 的條件值切換時(shí)草穆,框架有一個(gè)局部渲染的過程灌灾,因?yàn)樗鼤_保條件塊在切換時(shí)銷毀或重新渲染。相比于使用 class 進(jìn)行 hidden 就簡單的多悲柱,組件始終會被渲染锋喜,只是簡單的控制顯示與隱藏。一般來說豌鸡,wx:if 有更高的切換消耗而 hidden 有更高的初始渲染消耗嘿般。因此,如果需要頻繁切換的情景下直颅,用 hidden 更好博个,如果在運(yùn)行時(shí)條件不大可能改變則 wx:if 較好。
  • 事件:事件是視圖層到邏輯層的通訊方式功偿,事件可以將用戶的行為反饋到邏輯層進(jìn)行處理盆佣。事件可以綁定在組件上,當(dāng)達(dá)到觸發(fā)條件械荷,就會執(zhí)行邏輯層中對應(yīng)的事件處理函數(shù)共耍。事件對象可以攜帶額外的信息,比如id吨瞎、dataset痹兜、touches
  • 事件分為冒泡事件和非冒泡事件,bind事件綁定不會阻止冒泡事件向上冒泡颤诀,catch事件綁定可以阻止冒泡事件向上冒泡字旭。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市崖叫,隨后出現(xiàn)的幾起案子遗淳,更是在濱河造成了極大的恐慌,老刑警劉巖心傀,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屈暗,死亡現(xiàn)場離奇詭異,居然都是意外死亡脂男,警方通過查閱死者的電腦和手機(jī)养叛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宰翅,“玉大人弃甥,你說我怎么就攤上這事≈希” “怎么了潘飘?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵肮之,是天一觀的道長掉缺。 經(jīng)常有香客問我卜录,道長,這世上最難降的妖魔是什么眶明? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任艰毒,我火速辦了婚禮,結(jié)果婚禮上搜囱,老公的妹妹穿的比我還像新娘丑瞧。我一直安慰自己,他們只是感情好蜀肘,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布绊汹。 她就那樣靜靜地躺著,像睡著了一般扮宠。 火紅的嫁衣襯著肌膚如雪西乖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天坛增,我揣著相機(jī)與錄音获雕,去河邊找鬼。 笑死收捣,一個(gè)胖子當(dāng)著我的面吹牛届案,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罢艾,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼楣颠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咐蚯?” 一聲冷哼從身側(cè)響起童漩,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仓蛆,沒想到半個(gè)月后睁冬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡看疙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年豆拨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片能庆。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡施禾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出搁胆,到底是詐尸還是另有隱情弥搞,我是刑警寧澤邮绿,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站攀例,受9級特大地震影響船逮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粤铭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一挖胃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梆惯,春花似錦酱鸭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怯屉,卻和暖如春蔚舀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚀之。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工蝗敢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人足删。 一個(gè)月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓寿谴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親失受。 傳聞我的和親對象是個(gè)殘疾皇子讶泰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容