——我知道这个答案不适合这个问题,但我希望阅读这个问题并希望处理工厂等服务的人避免这样做的麻烦----
为此,您将需要使用服务或工厂。
服务是在非嵌套控制器之间共享数据的最佳实践。
关于数据共享这个主题的一个非常非常好的注释是如何声明对象。我很不幸,因为我在阅读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.
这对于嵌套控制器非常有用,如果你想让你的子控制器能够从父控制器....改变一个对象
但在您的情况下,您不需要嵌套作用域,但是有一个类似的方面可以从服务获取对象到控制器。
假设你有一个服务“Factory”,在返回空间中有一个objectA,它包含objectB, objectB又包含objectC。
如果你想从你的控制器GET对象tc到你的作用域,这样说是错误的:
$scope.neededObjectInController = Factory.objectA.objectB.objectC;
那没用的…
相反,只用一个点。
$scope.neededObjectInController = Factory.ObjectA;
然后,在DOM中,您可以从objectA调用objectC。这是与工厂相关的最佳实践,最重要的是,它将有助于避免意外和不可捕捉的错误。