Javascript 如何在不使用angular js中的服务的情况下在控制器之间交换数据
我有两个控制器Javascript 如何在不使用angular js中的服务的情况下在控制器之间交换数据,javascript,angularjs,Javascript,Angularjs,我有两个控制器C1和C2,我想验证我在C1中的数据,但验证逻辑在C2中,那么我如何将数据从C1传递到C2,并在C1中返回结果 我知道angular中的服务,但对于该通信,我必须将所有数据[太大]从C1和C2传递到似乎效率不高的服务。有没有优化的方法可以这样做?您可以在父控制器中注册这些C1/C2控制器,并将其用作代理 参考如果您不想使用公共服务,这里有两个选项 您可以使用$rootScope保存共享数据 通过选择C1下的元素,可以从C2访问C1的范围 假设位于C1下。您可以执行以下操作,从C2
C1
和C2
,我想验证我在C1
中的数据,但验证逻辑在C2
中,那么我如何将数据从C1
传递到C2
,并在C1
中返回结果
我知道angular中的服务,但对于该通信,我必须将所有数据[太大]从
C1
和C2
传递到似乎效率不高的服务。有没有优化的方法可以这样做?您可以在父控制器中注册这些C1/C2控制器,并将其用作代理
参考如果您不想使用公共服务,这里有两个选项
$rootScope
保存共享数据C1
下的元素,可以从C2
访问C1
的范围
位于C1
下。您可以执行以下操作,从C2
angular.element(document.getElementById(“myC1Candidate”)).scope()
注意
当您必须共享大量数据时,认为使用服务效率低下是错误的。将数据分配给服务单例时,数据通过引用共享 你可以用
控制器2(不要忘记将$rootScope
作为依赖项注入控制器):
控制器1:
$scope.$on("notifyC1",function(evt,data){
console.log(data)
});
但是,如果必须这样做的话,您应该重新考虑您的应用程序设计。将数据和验证逻辑存储在服务中,并将其注入控制器。1-您必须使用服务 2-如果不希望,则嵌套控制器继承范围:
<div ng-app="myApp">
<div ng-controller="Ctrl1 as c1">
<div ng-controller="Ctrl2 as c2">
{{c1.name}}
</div>
</div>
</div>
4-不要使用$rootScope存储数据。你能分享你的代码吗?如果两个控制器都在一个模块内,“似乎效率不高”,你可以使用$rootScope。。。呵呵?为什么不呢?你为什么要试图重新发明轮子,违背惯例?@code9215只有一个rootScope,不管有多少模块被注入到主应用程序模块中。我从未在控制器名称中使用“作为”功能。看起来很有意思。谢谢你的回复。
<div ng-app="myApp">
<div ng-controller="Ctrl1 as c1">
<div ng-controller="Ctrl2 as c2">
{{c1.name}}
</div>
</div>
</div>
.controller('C2', function($scope, $controller) {
$controller('C1', {$scope: $scope});
});