亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

AngularJS入門知識之MVW類框架的編程思想探討

2019-11-20 13:47:20
字體:
來源:轉載
供稿:網友

本文通過實現兩個簡單的業務需求,探討AngularJS和傳統的JavaScript控制DOM實現方式的差別,并嘗試理解MVW此類框架在流行的Web前端開發中的編程思想。

這個需求很常見,比如,一個兩級菜單,在第一級別菜單項點擊時候,對應的子菜單項目應該顯示或隱藏。

jQuery的實現:

復制代碼 代碼如下:

<!-- html -->
<ul class="parent">
    <li class="parent_item">
        Item 1
        <ul class="child">
            <li class="child_item">Item child 1</li>
        </ul>
    </li>
</ul>

// javascript
$('li.parent_item').click(function(){
    $(this).children('ul.child').toggle();
})

AngularJS的實現:

復制代碼 代碼如下:

<!-- html -->
<ul>
    <li ng-click="hide_child = !hide_child">
        Item 1
        <ul ng-hide="hide_child">
            <li>Item child 1</li>
        </ul>
    </li>
</ul>

傳統操作DOM的方式,不再贅述。AngularJS的實現,相對代碼要精煉很多,只有HTML的版本即可。以上代碼,用到了AngularJS這些知識點:

1.Directives 

2.Expressions

ng-clickng-hide都是框架自帶的Directives(指令),前者相當于給li標簽提供了一個Event Handler,在該HTML元素(li)被點擊的時候,會執行hide_child = !hide_child這個Expression(表達式)。我們先看一下ng-hide這個指令,它會根據賦值的表達式結果(布爾值)來控制該HTML元素是否要顯示(通過CSS實現)。也就是說,如果hide_child這個變量如果是true,那么ul就會被隱藏,否則結果相反。  

這里hide_child其實是$scope上的一個變量,對它的值的變更,也可以用controller控制器包裝一個方法來實現,只不過現在的語句比較簡單,直接寫在了指令的賦值里面。

通過以上簡單的代碼分析,我們可以看到AngularJS兩個比較明顯的特點:

1.通過指令和表達式對DOM的操作進行了封轉,只需簡單的代碼便可省去額外的JavaScript代碼
2.指令和表達式的應用,只直接嵌套在HTML中的,這和jQuery推從的Unobtrusive JavaScript的代碼風格有些背道而馳

我們先看另外一個需求,再詳細解釋上面的結論。

需求2:通過點擊div,觸發選擇form中的一個radio button
傳統的HTML Form元素,在如今的移動設備上,操作起來并不是十分友好。比如,Radio button單選框,在觸摸屏上,需要精確的位置定位,才能控制好這個組件,但是手指定位又很粗糙。常見的做法,是添加一個對應的Label控件,但是文字本身占屏比例也并不理想,而且也不具備明確的信息傳達效果。所以,通常會間接操作一個區域比較大的div或者li標簽。

jQuery的實現:

復制代碼 代碼如下:

<!-- html -->
<ul>
    <li class="selection">
        <input type="radio"
            id="option1" />
        <label for="option1">option 1</label>
    </li>
</ul>

// javascript
$('li.selection').click(function(){
    $(this).children('input[type="radio"]').click();
})

AngularJS的實現:

復制代碼 代碼如下:

<!-- html -->
<ul>
    <li ng-repeat="option in options"
        ng-click="model.option = option.value"
        ng-class="{active: model.option == option.value}" >
        <input type="radio"
            ng-model="model.option"
            value="{{option.value}}"
            id="option1" />
        <label for="option1">option 1</label>
    </li>
</ul>

在這個解決方案中,我們同樣沒有涉及到額外的JavaScript代碼,并且多用了幾個指令。為了對比參照,我們只關心ng-click和ng-model這兩個指令的表達式。

我們先看一下input這個元素的ng-model指令,這里賦值的意思是,我們把模板上的input和$scope.model對象的option屬性進行了關聯,深入了解數據綁定可以參考Data Binding。這種指定關聯,使得模板控件直接和數據Model進行了綁定,并且這種綁定是雙向的。意味著,一旦用戶修改控件中的值(勾選radio input),對應的Model對象就會重新賦值(model.option);同時,如果Model對象的值發生了變化,模板中的input控件也會對應反映變化。而這點,在上述jQuery的實現中,其實是沒有做到的。

所以,這里通過AngularJS的數據綁定,點擊li元素間接完成觸發input的流程是這樣子的:

1.點擊li標簽,給model.option賦值;
2.修改了Model對象,定位到對應input控件(value的值為model.option那個);
3.激活input控件的checked屬性

通過以上兩個案例,我們對Web前端的操作有了新的認識。

首先,技術實現上,通過引入新的指令,表達式,數據綁定等概念,我們可以完全新的方式去操作DOM,而不僅僅局限在用戶和HTML組件交互操作上的JavaScript代碼的實現。這種思想的變化是巨大的。

從本世紀初,動態Web編程的興起開始,服務器端的編程技術一直在改進。從一開始的CGI/PHP/ASP,由語言和平臺產生了.NET vs. Java,開發效率和軟件過程促進了MVC框架/ORM/AOP等,性能和大數據帶來了NodeJS/NoSQL/Hadoop等,而瀏覽器前端的技術需求似乎沒有那么激進過。一方面,通過服務器端和數據庫,大部分B/S模型的業務需求都能滿足;再者,瀏覽器本身存在不同平臺的差異性,對腳本語言和渲染技術的標準不兼容,以及運算能力的欠缺和安全性的考慮。

在這種情況下,瀏覽器端的需求,大部分時候只需要考慮渲染頁面和簡單的用戶交互。HTML/DOM加上JavaSript/CSS就這樣成就了前端的主要工作。所以,以前是沒有前端工作師,只需要Web設計師的。慢慢對前端的要求多起來,jQuery成為使用程度最高的一個JavaScript操作DOM的封裝庫。而在這個階段,jQuery/JavaScript的主要任務,仍然只是作為面向用戶瀏覽器終端呈現和交互的工具。

理解了jQuery的起源,我們不難發現,以前追求的一些規則,譬如Unobtrusive JavaScript,當時局限于實現的手段和方式,為了分離DOM和JavaScript代碼邏輯,我們優先選擇了維護性更高的方式。前端對JavaScript的需求加大之后,出現了很多MVC/MVP的前端框架,以及AngularJS所謂的MVW(Model-View-Whatever),JavaScript和DOM一刀切的方式發生了變化。原先我們考慮界面顯示和用戶交互的直接操作,現在我們有了客戶端的數據綁定,豐富的指令,依賴注入,等待我們的將是全新的編程模型和思維方式。 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产精品亚洲| 久久精品成人一区二区三区| 亚洲国产精品系列| 国产精品揄拍一区二区| 永久免费毛片在线播放不卡| 久久精品2019中文字幕| 欧美专区在线视频| 91高清视频免费| 亚洲综合社区网| 一本色道久久88综合亚洲精品ⅰ| 欧美大尺度电影在线观看| 7777kkkk成人观看| www国产精品com| 国产精品小说在线| 日韩av电影国产| 国产精品福利观看| 日本亚洲欧洲色α| 国产精品视频最多的网站| 在线精品高清中文字幕| 国产香蕉一区二区三区在线视频| 亚洲第一偷拍网| 久久久爽爽爽美女图片| 2019中文字幕在线免费观看| 狠狠色狠色综合曰曰| 国产欧美一区二区三区在线看| 亚洲美女激情视频| 青青a在线精品免费观看| 亚洲视频在线观看视频| 日韩美女免费线视频| 午夜免费久久久久| 亚洲片在线观看| 在线视频欧美性高潮| 日韩av片永久免费网站| 一区二区欧美久久| www.亚洲天堂| 亚洲精品电影在线| 国产日韩视频在线观看| 欧美日韩成人黄色| 日韩av网站大全| 欧美午夜激情视频| 欧美体内谢she精2性欧美| 77777亚洲午夜久久多人| 欧美精品久久久久久久久久| 国产不卡精品视男人的天堂| 国产欧美一区二区三区视频| 日本三级久久久| 国产精品久久久av久久久| 日韩中文字幕久久| 成人春色激情网| 亚洲一区中文字幕在线观看| 欧美一级淫片丝袜脚交| 91高清视频免费观看| 97人洗澡人人免费公开视频碰碰碰| 成人亚洲激情网| 亚洲缚视频在线观看| 91精品国产高清久久久久久91| 久久夜精品香蕉| 欧美性xxxx极品hd满灌| 欧美区在线播放| 国产欧美日韩综合精品| 91av网站在线播放| 午夜精品久久久久久久久久久久久| 亚洲精品免费网站| 久久久av亚洲男天堂| 亚洲天堂免费观看| 国产精品一二三视频| 26uuu亚洲伊人春色| 日韩欧美aⅴ综合网站发布| 国产亚洲精品美女久久久久| 伊人伊人伊人久久| 91国在线精品国内播放| 88国产精品欧美一区二区三区| 亚洲精品一区av在线播放| 欧美在线视频播放| 好吊成人免视频| 91tv亚洲精品香蕉国产一区7ujn| 日韩亚洲一区二区| 久久久久久国产精品美女| 欧美国产日韩视频| 精品成人乱色一区二区| 亚洲欧美国产高清va在线播| 日韩精品在线播放| 一夜七次郎国产精品亚洲| 色yeye香蕉凹凸一区二区av| 亚洲字幕一区二区| 国产成人精品优优av| 中文字幕综合一区| 国模精品视频一区二区三区| 欧美精品激情在线| 日韩av三级在线观看| 国产日韩在线看| 久久久亚洲网站| 国产在线视频91| 成人做爰www免费看视频网站| 永久免费看mv网站入口亚洲| 青草青草久热精品视频在线观看| …久久精品99久久香蕉国产| 亚洲精品电影在线观看| 一区二区亚洲欧洲国产日韩| 91网在线免费观看| 精品在线欧美视频| 最新亚洲国产精品| 亚洲奶大毛多的老太婆| 亚洲人成伊人成综合网久久久| 成人午夜两性视频| 欧美成人免费网| 欧美激情二区三区| 中文字幕av一区中文字幕天堂| 久久久国产视频| 国产+成+人+亚洲欧洲| 欧美极品少妇xxxxⅹ免费视频| 欧美激情一二区| 日韩成人网免费视频| 亚洲黄色成人网| 伊人久久久久久久久久| 在线国产精品视频| 北条麻妃在线一区二区| 欧美国产激情18| 大荫蒂欧美视频另类xxxx| 国产97在线|亚洲| 97av在线视频| 亚洲成av人影院在线观看| 精品女厕一区二区三区| 日韩国产一区三区| 日韩人体视频一二区| 国产精品视频精品视频| 亚洲国产精品女人久久久| 一本大道香蕉久在线播放29| 91色视频在线观看| 成人免费在线视频网站| 日韩欧美国产免费播放| 日韩精品高清视频| 26uuu亚洲伊人春色| 中文字幕免费精品一区| 热门国产精品亚洲第一区在线| 国产精品三级美女白浆呻吟| 狠狠躁夜夜躁人人躁婷婷91| 亚洲第一综合天堂另类专| 精品久久中文字幕久久av| 97国产在线视频| 岛国av一区二区三区| 亚洲精品资源在线| 欧美精品少妇videofree| 欧美成人在线免费| 国产日韩精品入口| 欧美日韩免费看| 亚洲精品综合久久中文字幕| 久久久久久久影视| 国产精品香蕉在线观看| 欧美亚洲另类视频| 欧美激情一区二区三区在线视频观看| 亚洲在线免费看| 久久久亚洲欧洲日产国码aⅴ| 国产精品黄色影片导航在线观看| 成人免费直播live| 91久久国产婷婷一区二区| 亚洲第一精品久久忘忧草社区| 国产精品美女无圣光视频| 亚洲图片欧美午夜| 日本精品性网站在线观看| 欧美性猛交丰臀xxxxx网站| 久久天天躁夜夜躁狠狠躁2022| 亚洲欧洲激情在线| 岛国av午夜精品|