关于jQuery的一个好处是我可以编写一个函数并从我的应用程序中的任何地方访问它。 AngularJS似乎有所不同,它有点令人沮丧。例如,我的网站上有以下代码:
<div id="myCtrl" ng-controller="myCtrl">
<div ng-click="doSomething()">click here</div>
</div>
问题是doSomething()
是在不同的控制器中定义的,因此它不起作用。这是我遇到的一个常见问题,AngularJS的这个方面使我的应用程序比仅使用纯jQuery来定义我的函数更复杂。如何在任何控制器内调用doSomething()
而无需创建服务/工厂等?这似乎使得一切都变得不必要地复杂化。
答案 0 :(得分:2)
简短的回答:你想要一个服务/工厂/...
通常,当您发现自己想要从不同的控制器调用控制器功能时,您应该创建一个服务。你最终会以这种方式获得更清晰的代码。使用服务将使阅读代码的任何人都清楚地了解到它所交付的任何控制器都需要该服务。
话虽如此,请查看:Can one controller call another?(特别是您可能会喜欢:http://egghead.io/lessons/angularjs-sharing-data-between-controllers)
答案 1 :(得分:0)
控制器无法以这种方式相互访问是有原因的。这只是一种分离。您没有在其他语言中声明所有变量全局的原因相同。
如果您想这样做,那么您应该为整个应用程序配备一个大控制器,并以此方式声明:
<body ng-controller="myCtrl">
</body>
但是,我认为这是一个坏主意,你应该学习服务,工厂......