controller as引入的意義和方法?

在Angular中,有幾種不同的方式來聲明和使用控制器。

在最開始的時(shí)候我們對于angular在view上的綁定都必須使用直接的scope對象,對于controller來說我們也得必須注入$scope這個(gè)service。

angular從1.2版本開始帶來了新語法Controller as。

它使我們不需要把$scope作為依賴項(xiàng)。簡潔了controller,同時(shí)我們可以使用this在控制器上直接添加我們想要的任何屬性。


$scope和this是什么?

引入controller as之前的寫法

引入controller a's之后的寫法

類比一下js中的構(gòu)造函數(shù)和實(shí)例:

用new方法給myClass()一個(gè)實(shí)例對象,我們可以在這個(gè)實(shí)例中訪問myClass()中的屬性和方法;

app.controller('MainCtrl',function(){})就是在定義一個(gè)名稱為MainCtrl的構(gòu)造函數(shù),MainCtrl as main就是在實(shí)例化,生成MainCtrl的實(shí)例main,然后就可以在main中訪問MainCtrl里定義的變量和函數(shù)

這樣類比的話,scope對象類似于構(gòu)造函數(shù)的原型對象,this則是指當(dāng)前實(shí)例對象

controller as有哪些優(yōu)點(diǎn)

1、controller as讓繼承關(guān)系的變量之間更清晰可讀

使用controller as后,在視圖嵌套中雙向綁定的數(shù)據(jù)所屬清晰可見,不會出現(xiàn)分不清哪個(gè)是哪個(gè)的問題;

2、controller as 方式解決了父子$scope帶來的混亂

直接使用$scope會產(chǎn)生父變字變,子變父不變的現(xiàn)象。當(dāng)一個(gè)對象的原型鏈上有屬性foo,你再給這個(gè)對象賦上一個(gè)屬性foo,它不會改變原型鏈上的屬性foo。只是新建的一個(gè)foo,在原型鏈的更近端,訪問這個(gè)屬性時(shí)不會在去尋找更遠(yuǎn)處的foo屬性。

使用controller as方式可以避免上面的混亂,讓關(guān)系更清晰:




controller as有哪些應(yīng)用方式?

1、在view視圖中定義

2、在路由配置中定義

對象__proto__屬性的值就是它所對應(yīng)的原型對象;



controller as的實(shí)質(zhì)是什么?

controller as的實(shí)質(zhì)是一種語法糖,我們可以看一下angular源碼:

從上面的代碼我們能看見的是:angular只是把controller這個(gè)對象實(shí)例以其as的別名在scope上創(chuàng)建了一個(gè)新的對象屬性。

等價(jià)于


參考文獻(xiàn):

AngularJS Controller As Syntax:

angular controller as syntax vs scope:

MENU AngularJS: "Controller as" or "$scope"? :

angularjs 中 controller as 引入的意義:


vm是什么?

vm是“view model”,controller函數(shù)實(shí)例的統(tǒng)稱。

為什么在controller中不直接用this,而要用vm等代指this?

為了避免this指向的混亂

controller as有缺點(diǎn)嗎?

使用controller as并不能提升整體性能,只是對我們簡潔代碼的一種規(guī)定,因?yàn)闆]有了$scope,而controller實(shí)例將會成為scope上的一個(gè)屬性,所以在controller中不能使用$watch,$emit,$on之類的特殊方法,因?yàn)檫@些東西往往不該出現(xiàn)在controller中的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • Angular面試題 一、ng-show/ng-hide與ng-if的區(qū)別? 第一點(diǎn)區(qū)別是,ng-if在后面表達(dá)式...
    w_zhuan閱讀 5,570評論 0 26
  • 1、angularjs的幾大特性是什么? 雙向數(shù)據(jù)綁定、依賴注入、模板、指令、MVC/MVVM 2、列舉幾種常見的...
    2e9a10d418ab閱讀 1,398評論 0 10
  • 1、angularjs的幾大特性是什么? 雙向數(shù)據(jù)綁定、依賴注入、模板、指令、MVC/MVVM 2、列舉幾種常見的...
    秀才JaneBook閱讀 1,557評論 0 22
  • AngularJS是什么?AngularJs(后面就簡稱ng了)是一個(gè)用于設(shè)計(jì)動態(tài)web應(yīng)用的結(jié)構(gòu)框架。首先,它是...
    200813閱讀 1,647評論 0 3