【问题标题】:AngularJS- How to pass data from one controller to another on ng-click()?AngularJS-如何在 ng-click() 上将数据从一个控制器传递到另一个控制器?
【发布时间】:2017-07-20 18:16:25
【问题描述】:

所以我试图在点击事件的两个控制器之间共享数据。我的代码如下:

控制器

function userTypeController($scope, $location, CategoryService) {
  let vm=this;

vm.getCat=function(){

    CategoryService.getCategories() .then(function (response) 
        {
          $scope.categories=response.data.data.categories;
          $scope.index = 0;
          $scope.array = [];
          for(var i=0; i<$scope.categories.length/2;i++)
          $scope.array.push(i);


                                       });
    $location.path('/category');
};
  };

在我的那个控制器的 html 中,我有一个调用 getCat 函数的按钮。

 <md-button md-whiteframe="8"  ng-click="utCtrl.getCat()">Submit<md-button>

在我的分类服务中,我有一个返回分类列表的函数。

服务

return {
            getCategories: function () {
                return $http.get(url2);
            }

现在我希望从服务器获得的类别数组可以在我的类别控制器中访问。我之前使用 $rootScope 将用户类型控制器的日期共享给另一个控制器,但这不是理想的做法。我希望 $scope.array 可以在我的类别控制器中访问,以便我可以在其视图中显示它。什么是最好的方法来做到这一点。非常感谢!

【问题讨论】:

    标签: angularjs angularjs-scope


    【解决方案1】:

    这将立即为您提供结果,无需服务或任何东西,您也可以将 $broadcast 用于多个控制器:

    <div ng-app="myApp" ng-controller="myCtrl"> 
    
        <button ng-click="sendData();"></button>
    
    </div>
    
    
    <script>
        var app = angular.module('myApp', []);
        app.controller('myCtrl', function($rootScope, $http) {
            function sendData() {
                var arrayData = [1,2,3];
                $rootScope.$emit('eventName', arrayData);
            }
        });
        app.controller('yourCtrl', function($rootScope, $http) {
            $rootScope.$on('eventName', function(event, data) {
                console.log(data); 
            }); 
        });
    </script>
    

    【讨论】:

    • 在控制器'yourCtrl'中,应该是$rootScope.$on(...)而不是$scope.$on(...)
    • @JS Guru : 好的.. 谢谢
    【解决方案2】:

    在这种情况下,您应该考虑使用服务在您的控制器之间共享数据。

    SharedService.js

    app.service('sharedService', function(){
      var categories = [];  
      names.add = function(incategories){
        categories = incategories;
      };
      names.get = function(){
        return categories;
      };     
    });
    

    然后注入你的控制器1和控制器2并根据你的要求使用。

     app.controller("TestCtrl", 
       function($scope,sharedService) {
        $scope.categories =[];
        $scope.save= function(){
          sharedService.add(yourcat);
        }   
       }
      );
    

    然后将其用作,

     app.controller("TestCtrl2", 
       function($scope,sharedService) {      
       $scope.getcategories = function(){
         $scope.categories = sharedService.get();
       }
      }
     );
    

    【讨论】:

    • 嘿Sajeetharan。我希望在单击用户类型页面上的按钮后立即动态显示数据。我不想被重定向到类别页面,然后不得不按另一个按钮来查看类别。我该怎么做?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-09-10
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多