Angularjs 如何调用在不同控制器中定义的函数?

Angularjs 如何调用在不同控制器中定义的函数?,angularjs,Angularjs,jQuery的一个优点是,我可以编写函数并从应用程序中的任何位置访问它。AngularJS看起来不一样,有点令人沮丧。例如,我的网站上有以下代码: <div id="myCtrl" ng-controller="myCtrl"> <div ng-click="doSomething()">click here</div> </div> 点击这里 问题在于doSomething()是在不同的控制器中定义的,因此它不起作用。这是我遇到的一

jQuery的一个优点是,我可以编写函数并从应用程序中的任何位置访问它。AngularJS看起来不一样,有点令人沮丧。例如,我的网站上有以下代码:

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

点击这里

问题在于
doSomething()
是在不同的控制器中定义的,因此它不起作用。这是我遇到的一个常见问题,AngularJS的这一方面使我的应用程序比仅仅使用纯jQuery定义函数更复杂。如何从任何控制器中调用
doSomething()
,而不必创建服务/工厂等。?这似乎使一切变得不必要的复杂。

控制器之间无法通过这种方式相互访问是有原因的。这只是一种分离。这也是为什么不在其他语言中声明所有全局变量的原因

如果您想这样做,那么您应该为整个应用程序配备一个大型控制器,并以这种方式声明:

<body ng-controller="myCtrl">

</body>


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

简短的回答:你想要一个服务/工厂/

通常,当您发现自己想要从不同的控制器调用控制器函数时,您应该创建一个服务。这样,您最终会得到更干净的代码。使用服务将使任何阅读您的代码的人清楚地知道,无论交付给哪个控制器,该服务都是必需的

话虽如此,请查看:(您可能特别喜欢:)