Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在AngularJS中的控制器之间共享来自API的数据_Javascript_Angularjs - Fatal编程技术网

Javascript 在AngularJS中的控制器之间共享来自API的数据

Javascript 在AngularJS中的控制器之间共享来自API的数据,javascript,angularjs,Javascript,Angularjs,我有一个父控制器和一些子控制器,我希望它们都共享我从Api服务检索的相同数据 控制器: 视图: {{list.item} {{list.item} {{list.item} {{list.item} 我尝试使用Angular的事件机制($on,$emit)解决方案。 问题是,我必须找出哪个子控制器处于活动状态,并在承诺解决后发送数据。它以难看的意大利面代码结尾…由于您的数据在父控制器的作用域中,您可以使用$scope.$parent>在子控制器中访问它: ap

我有一个父控制器和一些子控制器,我希望它们都共享我从Api服务检索的相同数据

控制器: 视图:

  • {{list.item}
  • {{list.item}
  • {{list.item}
  • {{list.item}
我尝试使用Angular的事件机制($on,$emit)解决方案。

问题是,我必须找出哪个子控制器处于活动状态,并在承诺解决后发送数据。它以难看的意大利面代码结尾…

由于您的数据在父控制器的作用域中,您可以使用
$scope.$parent>在子控制器中访问它:

app.controller('child1', ['$scope', function($scope) {
    $scope.list1 = $scope.$parent.list1;
    $scope.list2 = $scope.$parent.list2;
}]);

由于您的数据在父控制器的作用域中,因此您可以使用
$scope.$parent
在子控制器中访问它:

app.controller('child1', ['$scope', function($scope) {
    $scope.list1 = $scope.$parent.list1;
    $scope.list2 = $scope.$parent.list2;
}]);

最好的方法是使用
服务
将API处理atomar放在应用程序中。向你展示你如何能达到你想要达到的目标。通过使用,您将能够在控制器之间共享相同的数据、对象和函数,并让它们彼此交互。这取决于应用程序中控制器的数量

下面的示例是一个完整的API服务,具有真实的HTTP请求和真实的AngularJS服务处理。它将帮助您在应用程序中实现这样的逻辑。请不要忘记查看

看法
最好的方法是使用
服务
将API处理atomar放在应用程序中。向你展示你如何能达到你想要达到的目标。通过使用,您将能够在控制器之间共享相同的数据、对象和函数,并让它们彼此交互。这取决于应用程序中控制器的数量

下面的示例是一个完整的API服务,具有真实的HTTP请求和真实的AngularJS服务处理。它将帮助您在应用程序中实现这样的逻辑。请不要忘记查看

看法
将子对象编写为指令,然后可以在作用域上注入数据

yourModule.directive('child1', function() { return { scope: {list1:'=', controller: function (scope) { //not sure you even need a controller, but it might look like this scope.doSomething = function() { //access scope.list1 here } }, template: '<ul><li ng-repeat="list in list1">{{list.item}}<li><ul>' } } 指令('child1',函数(){ 返回{ 作用域:{list1:'=', 控制器:功能(范围){ //甚至不确定您是否需要控制器,但它可能看起来像这样 scope.doSomething=函数(){ //此处访问scope.list1 } }, 模板:'
  • {{list.item}
    • ' } } 用法:

      <child1 list1="list1"></child1>
      将子对象编写为指令,然后可以在作用域上注入数据

      yourModule.directive('child1', function() { return { scope: {list1:'=', controller: function (scope) { //not sure you even need a controller, but it might look like this scope.doSomething = function() { //access scope.list1 here } }, template: '<ul><li ng-repeat="list in list1">{{list.item}}<li><ul>' } } 指令('child1',函数(){ 返回{ 作用域:{list1:'=', 控制器:功能(范围){ //甚至不确定您是否需要控制器,但它可能看起来像这样 scope.doSomething=函数(){ //此处访问scope.list1 } }, 模板:'
      • {{list.item}
        • ' } } 用法:

          <child1 list1="list1"></child1>
          @Mistalis可能重复是的,他有一个
          Api
          服务向服务器发出请求,没有任何东西阻止创建另一个服务,负责在控制器之间存储和共享接收到的数据。总之,在我看来,共享角度数据的通用方法是通过@Mistalis可能重复的服务是的,他有一个
          Api
          service要向服务器发出请求,没有什么可以阻止创建另一个服务,该服务将负责在控制器之间存储和共享接收到的数据。无论如何,在angular中共享数据的通用方法是通过服务。更好的方法是使用工厂而不是DOM层次结构控制器绑定。@lin 100%同意,但据我所知,这是关于访问子控制器中的数据。@Mistalis也许我的问题不太清楚,但我希望能够从每个控制器中访问相同的数据,我尝试编写一个服务,但在控制器中得到的只是未定义的值。更好的方法是使用工厂而不是DOM层次结构控制器绑定。@lin 100%同意,但据我所知,这是关于访问子控制器中的数据的问题。@Mistalis可能我的问题不太清楚,但我希望能够从每个控制器访问相同的数据,我尝试编写服务,但在控制器中得到的只是未定义的值。 <child1 list1="list1"></child1>