2013-10-12 37 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> 

但是,我认为这是一个坏主意,那你应该学会服务,工厂,...

相关问题