2016-09-27 297 views
0

我是新來的角JS,我學習它通過各種偉大的鏈接和他們的我碰到是inheritance它展示瞭如何獲得角的js繼承,但我的疑問是筆者說:「由於AngularJS不提供任何內置-in使用繼承的功能,在本博客文章中我將介紹如何將一般JavaScript繼承模式應用於AngularJS組件。「但是我們確實有角度繼承的範圍,那麼他的第一個陳述意味着什麼呢?我是否錯過理解?請解釋一下。AngularJS繼承模式不使用範圍?

+1

歡迎計算器: - http://stackoverflow.com/help/how-to-ask –

+1

不如google一下.... –

+0

請參閱[我的回答(http://stackoverflow.com/a/39721937/2545680) –

回答

1

由於AngularJS不使用 繼承提供任何內置功能

這意味着,角爲框架不具有繼承(代碼重用)的任何機構,像例如,主幹的extend功能。但是,您可能仍然需要繼承控制器或服務的功能,因此本文向您展示瞭如何在角度框架中使用原生JS。

我們確實有角

範圍繼承是,範圍確實使用prototypes,但它使用的不是共享功能(代碼重用),而是讓孩子創建由父母訪問數據,而無需額外的機制

+0

感謝它幫助我清楚地懷疑,範圍是在孩子和父母之間共享數據,但我有一個小懷疑我是否將函數添加到父級作用域不會讓我的子控制器得到它,如果不能,則會增加它的重用性? – Charu

+0

@Charu,是的,如果你的子範圍沒有被隔離,子範圍也可以訪問父類函數。但是我不會重用在作用域上定義的函數,如果您需要一個在多個地方使用的函數,如果它與業務邏輯或控制器相關,那麼最好將它放在某個服務上,如果此函數準備了演示數據 –

+0

Angular _does_有angular.extend() –

0

AngularJs $ Scope - 在AngularJS中,$ Scope是組織到層次結構中的對象。有一個根作用域,並且根作用域具有一個或多個子作用域。每個視圖都有自己的$ scope(這是根作用域的子視圖),因此無論一個視圖控制器在其$ scope變量上設置了哪些變量,這些變量對其他控制器都是不可見的。

繼承 - 繼承,您可以創建一個新的重用類,擴展和修改在其他類中定義的行爲。其成員被繼承的類稱爲基類,並且繼承這些成員的類稱爲派生類。派生類只能有一個直接基類。繼承是傳遞的。如果ClassC是從ClassB派生的,並且ClassB是從ClassA派生的,則ClassC將繼承在ClassB和ClassA中聲明的成員。

+0

我是知道的,但我的疑問是筆者所說的話「由於AngularJS不使用提供任何內置功能繼承,在這篇博客文章中我將介紹如何將一般JavaScript繼承模式應用於AngularJS組件。「但是我們確實有範圍,那麼他的意思是什麼? – Charu

+0

範圍只是一個對象,它指的是應用程序模型,它將綁定ng-model的值,並且它可以觀察表達式和事件 –

+0

@ MBalajivaishnav我理解範圍我的擔心不是這樣,請看看我編輯的問題和上面的評論,看看我的疑問 – Charu

0

角爲框架,JavaScript是編程語言,繼承語言功能沒有框架的功能。所以從這裏開始 - 如何在JavaScript中進行繼承,並且它可以用於角度(或任何其他框架),該角度只是在javascript中創建的庫。

創建的方法等一些框架在骨幹延伸,而是延伸是方法,該方法是做基於原型繼承在純JS。這不是魔術。同樣的事情在角變量服務來完成,範圍等

0

另一個設計範例,角涉及繼承常用在於創建服務。我們可以創建一個服務,讓我們把它叫做BaseService,像這樣..

this.publicVar = '..' 

this.method1 = function() .. 

this.method2 = function() .. 

var privateMethod = function() .. 

var privateVar = '...'; 

return this; 

and then in another service, inject the BaseService, and then begin by doing 

this = Object.create(BaseService); 

then you can extend the BaseService in this new service with other methods 

this.newServiceMethod = function() ...