2013-10-12 32 views
1

關於jQuery的好處之一是我可以編寫一個函數並在我的應用程序的任何地方訪問它。 AngularJS看起來不同,它有點令人沮喪。例如,我在我的網站上看到以下代碼:如何調用在不同控制器中定義的功能?

<div id="myCtrl" ng-controller="myCtrl"> 
    <div ng-click="doSomething()">click here</div> 
</div> 

的問題是,doSomething()在不同的控制器進行定義,因此這是行不通的。這是我遇到的一個常見問題,AngularJS的這一方面使我的應用程序比使用純jQuery來定義我的函數更加複雜。如何在任何控制器內撥打doSomething()而無需創建服務/工廠等?這看起來像是讓一切變得不必要的複雜。

回答

2

簡短的回答:你想有一個服務/工廠/ ...

一般來說,當你發現自己想從不同的控制器,這是你應該創建一個符號調用控制器功能服務。你真的會以這種方式得到更乾淨的代碼。使用服務將使任何讀取你的代碼的人都清楚,無論任何控制器傳遞給它的服務都需要該服務。

話雖如此,退房:Can one controller call another?(尤其您可能會喜歡:http://egghead.io/lessons/angularjs-sharing-data-between-controllers

0

控制器不能以這種方式訪問​​對方是有原因的。這只是一種分離。與其他語言中不聲明全局變量的原因相同的原因。

如果你想這樣做,你應該再有1個大的控制器,爲您的整個應用程序,宣稱這種方式:

<body ng-controller="myCtrl"> 

</body> 

但是,我認爲這是一個壞主意,那你應該學會服務,工廠,...

相關問題