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});
    });