2016-04-25 59 views
0

我最近開始和AngularJS一起工作,掌握了基礎知識,但在我看到的例子中,我找到了兩種不同的方法。

使得變量和函數私營:

function myController(){ 
    var controller = this; 
    controller.myVar = 0; 
    controller.myFunction = function(){...}; 
} 

,使他們的公共通過$範圍:

function myController(){ 
    $scope.myVar = myVar; 
    $scope.myFunction = function(){...} 
} 

我可以理解,需要做一些私有的,但暴露的變量和函數因爲在這些情況下,感覺像單一責任原則被打破,公衆並不認同我。

有沒有很好的理由讓這樣的公開?有沒有其他方法可以公開某些東西?還是我擔心太多?

+0

當你想使用雙向數據綁定時,使用'$ scope'。即當您不想顯式讀取/更新DOM時。 – Tushar

+0

最好的信息在這裏http://stackoverflow.com/questions/11605917/this-vs-scope-in​​-angularjs-controllers –

回答

1

$scope是在Angular中做事的較老方法。新的方法是使用controllerAs語法 - 當您將this的值綁定到變量時。

它們都可以工作,但是更新的做法被引入了許多原因 - 其中主要原因是它更接近他們期待的Angular 2的存在方式。此外,控制器作爲處事方式,允許人們在視圖中嵌套代碼範圍,並更好地理解插值值的來源。例如:

<div ng-controller="controller1"> 
    {{someVal}} 
    <div ng-controller="controller2">{{anotherVal}}</div> 
</div> 

由於範圍的角度繼承,這是很難說是否爲anotherVal值從controller1controller2到來。當使用controllerAs語法,它會清除了位通過能夠做這樣的事:

<div ng-controller="controller1 as ctrl1"> 
    {{ctrl1.someVal}} 
    <div ng-controller="controller2 as ctrl2"> 
     {{ctrl2.anotherVal}} 
    </div> 
</div> 

現在,在這些值都來自它變得很明顯。

然而,直接回答你的問題,你可能仍然需要在你希望訪問某些角度生命週期掛鉤,如$scope.$watch$scope.apply

我認爲主要的原因使用$scope對象將事情公諸於衆就是爲了測試目的,並讓Angular「知道」某些數據更改,以便可以讓任何「收聽」視圖對這些更改作出反應並更新。

+0

萬一我不想公開一個元素,我的替代方法是什麼?此外,將此稱爲「舊方式」有點讓我感到不舒服,有沒有適當的方式來稱呼它? –

+0

如果你不想公開暴露某些東西,只需將它附加到'$ scope'或'this'並遵循普通的JavaScript範圍規則。 除此之外,您可以查看創建指令隔離範圍,以更精確地調整應用程序中的「誰得到什麼」。 編輯:我可以看到最接近的東西不是指它作爲「舊的方式」將是「直接綁定到注入的範圍對象」。一口滿嘴。 https://docs.angularjs.org/guide/directive – Pytth

+0

我沒有正確地解決我的評論,我的意思是,如果我需要在控制器之間創建一些可訪問的內容,但不想使用$ scope來公開它,我有什麼替代品? –

0

只有在您執行數據綁定或想要在控制器之間傳遞數據時才使用$scope,否則您不必這樣做。

相關問題