1

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

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

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

4

2 回答 2

2

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

通常,当您发现自己想从不同的控制器调用控制器函数时,这表明您应该创建服务。这样你真的会得到更干净的代码。使用服务将使任何阅读您的代码的人清楚地知道,无论它被移交给什么控制器,都需要该服务。

话虽如此,请查看:一个控制器可以调用另一个控制器吗? (特别是你可能喜欢:http ://egghead.io/lessons/angularjs-sharing-data-between-controllers )

于 2013-10-12T16:55:55.977 回答
0

控制器无法以这种方式相互访问是有原因的。这只是一种分离。与您不在其他语言中声明所有变量全局的原因相同。

如果你想这样做,你应该为你的整个应用程序有 1 个大控制器,这样声明它:

<body ng-controller="myCtrl">

</body>

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

于 2013-10-12T16:53:52.227 回答