什么是控制器?

大家好,我是IT修真院萌新分院第3期的學員張曉琳,一枚正直、純潔、善良的前端程序員今天給大家分享一下,修真院官網js任務2深度思考中的知識點——什么是控制器?

1.背景介紹

在學習angular的過程中,不同于javascript,遇到了許多新的概念,

比如指令(directive)、服務(service)、控制器(controller)、模型(model)等。

還接觸到了MVC這種將數(shù)據(jù)管理、業(yè)務邏輯控制和數(shù)據(jù)展示分離開,

AngularJS的控制器主要為了把模型和視圖連接在一起。大多數(shù)業(yè)務邏輯操作都會放在視圖對應的控制器中。 當然如果我們能夠把業(yè)務邏輯放到后端的REST服務中,就可以開發(fā)輕量級AngularJS應用。 涉及到多個控制器中使用的業(yè)務邏輯,需要放到一個公共的服務中,然后把改服務注入使用到該業(yè)務邏輯的控制器中。 進而使程序的邏輯性和可維護性更強的思想。接下來,分享、討論一下控制器的用法。

2.知識剖析

1. 理解MVC控制器?

在AngularJS的控制器中,構造函數(shù)會有$scope參數(shù)。

當一個控制器通過ng-controller指令連接到DOM上,

Angular將實例化一個新的控制器對象,然后調用指定的控制器的構造函數(shù)。

一個新的子作用范圍(scope)將被創(chuàng)建,并作為一種可注入的參數(shù)傳遞給控制器的構造函數(shù)為$scope。

如果控制器使用controller as語法附加到DOM上,

那么控制器實例將被分配給新的$scope范圍。

并且多了一個和as同名的屬性,然后把自己指向這個屬性,就方便我們訪問了。

控制器的作用

在控制器中初始化模型(添加屬性)

創(chuàng)建控制器并將它附加到DOM元素之后,AngularJS會創(chuàng)建一個子作用域。

子作用域保存著對應控制器的數(shù)據(jù)模型。子作用域可以通過$scope來獲取。

demo

1. 控制器作用域

因為控制器是附加到DOM元素上,所以存在著一個視圖,有多個控制器。

控制器之間可以是并列的,也可以是嵌套的形式存在。

2. 視圖中控制器并列

各個控制器從附加DOM元素節(jié)點開始,

到節(jié)點對應閉合標簽結束的地方創(chuàng)建了一個子控制域,

單個控制器里面的$scope對象只能訪問和調用該控制器范圍內的屬性和方法。

3. 視圖中控制器嵌套

默認情況下,AngularJS在當前作用域中無法找到某個屬性,就會在父級作用域中進行查找。

即子級控制器會繼承父級控制器中的對象。但是子級作用域和父級作用域中有相同的屬性,

子級使用自己的作用域。這個時候子級作用域要訪問父級作用域的屬性可以通過$parent。

類似JavaScript本身的原型鏈方式。 4. 何為ControllerAs

AngularJS提供$scope方式來處理Controller

demo

3.常見問題

如何在多個controller中進行信息的溝通?

4.解決方案

方法一:利用作用域繼承的原理,子控制器訪問父級控制器中的內容。

方法二:使用service服務進行數(shù)據(jù)傳輸。

在之前的例子我們提到,controller是相對獨立的,兩個controller之間,

內存是不共享的,同級DOM下,兩個controller是無法互相訪問其中的屬性或者方法的。

那么,在實際項目中,我們會有很多的頁面和控制器,

不同頁面下的controller之間有時候是需要傳輸數(shù)據(jù)的,

之前我們學習了localStorage,用于頁面之間的傳參。

其實,官方建議頁面之間通過service互相訪問。

5.編碼實戰(zhàn)

6.擴展思考

問題: 在多個controller中進行信息的溝通還有哪些?

ngularJs項目實戰(zhàn): 不同controller作用域之間通信的方式

7.參考文獻

Controller官方介紹

angularjs 嵌套控制器,子控制器訪問父控制器

angular controller as syntax vs scope

用$scope還是用controller as

8.更多討論

討論:大家對angularJs中的控制器還有哪些理解?

問題:

Q1:王棟:ui-router的子頁面的controller是使用父級的還是自己的

A1:張曉琳:自己的。

Q2:王棟:service怎么傳參?

A2:張曉琳:在請求里面的url里傳參。

Q3:王姣妍:controller與service有什么關系?

Q3:張曉琳:controller和service??是兩個不同的東西????沒啥關系

Q4:王姣妍:controller不能調用service的東西嗎?

Q4:張曉琳:可以調用,但是得注入這個東西

ppt

視頻

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容