Angularjs在控制器之间共享方法

时间:2013-07-03 16:20:50

标签: javascript angularjs

我有一个应用程序在一个页面(主页)中显示新闻源,而在另一个页面中,它只显示用户的源(用户个人资料页面)。

两个页面的外观和行为都是一样的。内容的变化是由不同的网址引起的。

如何在angularjs中解决这个问题?

我有一个家庭控制器,其中包含用于显示主页的所有方法/逻辑。

现在我需要再有一个控制器来调用另一个url并做与home controller相同的操作。

我在考虑像父控制器和两个控制器这样的东西。但看起来像angularjs控制器继承是由dom结构决定的。就我而言,它们是两个不同的页面。所以我不能创建一个dom样式继承。

我很困惑如何在不重复两个控制器中的代码的情况下解决这个问题。

如果需要,我很乐意为此问题添加更多详细信息。我经历了一些谷歌搜索结果,但我无法弄清楚如何做到这一点。

2 个答案:

答案 0 :(得分:3)

服务(不是控制器)应该拥有域模型,并为应用程序的其余部分(通常是控制器)提供model API以供使用。

我建议至少提供两个服务,一个用于您的新闻源,一个用于您的个人资料,可能还有一个用于任何共享功能(这些功能可以通过集合或单个帖子作为参数传递)。将适当的服务注入每个控制器。

“look”应该在您使用ng-view或ng-include引入的HTML模板中。模板的ng-repeat将引用一个$ scope属性集合,该属性是对您的某个服务中存储的数据的引用。

有关新闻源服务的示例,以及控制器如何获取对数据的引用,请参阅Should services expose their asynchronicity?

我不担心重复使用$ http服务所需的代码并在每个服务中返回一个promise。有一天,您的个人资料页面的开始/行为可能与您的新闻源页面不同。

答案 1 :(得分:1)

将用于格式化和显示的逻辑拉入实用角度服务(app.factory)。然后你可以将它注入两个控制器并以这种方式共享逻辑。