--- 我知道这个答案不是针对这个问题的,但我希望阅读这个问题并想要处理诸如工厂之类的服务的人避免这样做的麻烦 ----
为此,您需要使用服务或工厂。
这些服务是在非嵌套控制器之间共享数据的最佳实践。
关于这个关于数据共享的主题,一个非常好的注释是如何声明对象。我很倒霉,因为我在读到它之前就掉入了 AngularJS 的陷阱,我非常沮丧。所以让我帮你避免这个麻烦。
我从“ng-book: The complete book on AngularJS”中读到,在控制器中作为裸数据创建的 AngularJS ng-models 是错误的!
$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.
如果您希望子控制器能够从父控制器更改对象,这对嵌套控制器非常有用....
但是在您的情况下,您不需要嵌套范围,但是从服务到控制器获取对象也有类似的方面。
假设您有您的服务“工厂”,并且在返回空间中有一个包含 objectB 的 objectA,其中包含 objectC。
如果您想从您的控制器中将 objectC 放入您的范围内,那么说:
$scope.neededObjectInController = Factory.objectA.objectB.objectC;
那行不通……
而是只使用一个点。
$scope.neededObjectInController = Factory.ObjectA;
然后,在 DOM 中,您可以从 objectA 调用 objectC。这是与工厂相关的最佳实践,最重要的是,它将有助于避免意外和无法捕捉的错误。