国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

vue 中directive功能的簡單實現

2024-05-06 15:22:52
字體:
來源:轉載
供稿:網友

2018年首個計劃是學習vue源碼,查閱了一番資料之后,決定從第一個commit開始看起,這將是一場持久戰!本篇介紹directive的簡單實現,主要學習其實現的思路及代碼的設計(directive和filter擴展起來非常方便,符合設計模式中的 開閉原則 )。

構思API

<div id="app" sd-on-click="toggle | .button"> <p sd-text="msg | capitalize"></p> <p sd-class-red="error" sd-text="content"></p> <button class="button">Toggle class</button></div>var app = Seed.create({ id: 'app', scope: {  msg: 'hello',  content: 'world',  error: true,  toggle: function() {   app.scope.error = !app.scope.error;  } }});

實現功能夠簡單吧--將scope中的數據綁定到app中。

核心邏輯設計

指令格式

以 sd-text="msg | capitalize" 為例說明:

    sd 為統一的前綴標識 text 為指令名稱 capitalize 為過濾器名稱

其中 | 后面為過濾器,可以添加多個。 sd-class-red 中的red為參數。

代碼結構介紹

main.js 入口文件

// Seed構造函數const Seed = function(opts) {};// 對外暴露的APImodule.exports = { create: function(opts) {  return new Seed(opts); }};directives.jsmodule.exports = { text: function(el, value) {  el.textContent = value || ''; }};filters.jsmodule.exports = { capitalize: function(value) {  value = value.toString();  return value.charAt(0).toUpperCase() + value.slice(1); }};

就這三個文件,其中directives和filters都是配置文件,很易于擴展。

實現的大致思路如下:

1.在Seed實例創建的時候會依次解析el容器中node節點的指令

2.將指令解析結果封裝為指令對象,結構為:

屬性 說明 類型
attr 原始屬性,如 sd-text String
key 對應scope對象中的屬性名稱 String
filters 過濾器名稱列表 Array
definition 該指令的定義,如text對應的函數 Function
argument 從attr中解析出來的參數(只支持一個參數) String
update 更新directive時調用 typeof def === 'function' ? def : def.update Function
bind 如果directive中定義了bind方法,則在 bindDirective 中會調用 Function
el 存儲當前element元素 Element
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 延长县| 德清县| 慈溪市| 正宁县| 大埔区| 吉木乃县| 汉沽区| 泌阳县| 喜德县| 诸暨市| 故城县| 固镇县| 独山县| 醴陵市| 甘南县| 青铜峡市| 彭泽县| 贡嘎县| 固原市| 三明市| 衡阳市| 亳州市| 长宁县| 永济市| 潞城市| 湖北省| 定远县| 沧源| 喀什市| 沛县| 米脂县| 全椒县| 远安县| 腾冲县| 民县| 达州市| 洪泽县| 通许县| 荃湾区| 汝城县| 兴仁县|