这有点跟进了我的“Is it bad practice for an angular directive to request data”问。
我的问题是保存应用程序数据的适当位置? 例如 - 有关当前用户的信息,例如他的名字和他在应用程序中的角色?
不同的区域(在屏幕上)和组件将取决于这些数据(例如 - 侧栏将想知道 curentUser.isAnAdmin 和 helloUser 指令是否会想知道 currentUser.name
这是否意味着currentUser应该放在 $ rootScope 上? 什么应该是检索currentUser的初始数据和刷新此信息的触发器?
我在考虑让几个 ngController 负责在与ngApp相同的html节点范围内设置这些数据,但发现不可能有多个< em> ngController 在单个HTML项目上。
我现在正在考虑使用获取范围对象的方法的多个服务,并将他们负责的数据分配到该范围。 它允许我将 currentUser 的代码与 someOtherSharedAppData 的代码分成两个不同的服务,并从应用程序的主控制器调用它们,从而将数据分配给与之关联的范围应用程序中最顶层的元素 - 这有意义吗?
答案 0 :(得分:1)
事实上你在这里问了两个问题:
<强> 1)强> 我将参考this article: 每当数据和方法需要重用时,我就会编写一个这样的服务。
angular.module('modelDemo').service("myModel", [function() {
this.list = [what, ever, items, you, have];
this.property= null;
this.setProperty = function(value) {
this.property= value;
};
}]);
注意,我不正如您所考虑的那样传递$ scope。相反,我会在我的控制器中注入服务并绑定$ scope变量,如下所示:
$scope.list = myModel.list;
如果需要,您甚至可以绑定到完整模型
$scope.myModel = myModel;
myModel.setPropery(value)
知道了吗?这样,所有模型更改都可以直接用于相应的视图
{{myModel.property}}
ng-repeat="item in myModel.list"
ng-click="myModel.setProperty(item)"
结论:是的,您应该为您的用户模型和someOtherSharedAppData模型提供不同的服务。
<强> 2)强> 我将参考这个SO Question。 简而言之:如果您有许多视图中可用的数据,则可以将(服务)模型绑定到$ rootScope变量。正如您在上述讨论中所看到的,还有其他意见,但我认为结论是:它取决于您的应用程序的结构和需求。