---我知道这个答案不是针对这个问题的,但是我希望那些读过这个问题并希望处理工厂等服务的人避免这样做的麻烦----
为此,您将需要使用服务或工厂。
这些服务是在非嵌套控制器之间共享数据的最佳实践。
关于数据共享的这个主题的一个很好的注释是如何声明对象。我很不幸,因为在我读到它之前就陷入了AngularJS陷阱,我感到非常沮丧。因此,让我帮助您避免这种麻烦。
我从《 ng书:关于AngularJS的完整书》中读到,在控制器中作为裸数据创建的AngularJS ng模型是错误的!
$ scope元素应这样创建:
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// best practice, always use a model
$scope.someModel = {
someValue: 'hello computer'
});
而且不是这样的:
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// anti-pattern, bare value
$scope.someBareValue = 'hello computer';
};
});
这是因为建议将DOM(html文档)包含为
<div ng-model="someModel.someValue"></div> //NOTICE THE DOT.
如果希望子控制器能够从父控制器更改对象,这对于嵌套控制器非常有用。
但是在您的情况下,您不需要嵌套作用域,但是有一个相似的方面可以将对象从服务获取到控制器。
假设您有服务“工厂”,并且在返回空间中有一个objectA,其中objectB包含objectC。
如果您想从您的控制器中将objectC放入您的作用域中,那就错了:
$scope.neededObjectInController = Factory.objectA.objectB.objectC;
那行不通...
而是只使用一个点。
$scope.neededObjectInController = Factory.ObjectA;
然后,在DOM中,您可以从objectA调用objectC。这是与工厂有关的最佳实践,最重要的是,它将有助于避免意外的和不可捕获的错误。