如何将id从一个控制器发送到另一个控制器

时间:2016-06-18 07:52:55

标签: angularjs

我有一个显示我的软件组名称的基本控制器:

var SoftwareGroupApp = angular.module('SoftwareGroupApp', []);
SoftwareGroupApp.controller('SoftwareGroupController', function($scope, $http) {
 $http.get("select_SoftwareGroup.php")

.then(function (response) {$scope.result = response.data.records;});
});

在我看来,我在列表中显示此软件组

<ul class="sub-menu">
            <div ng-app="SoftwareGroupApp" ng-controller="SoftwareGroupController">
                <li ng-repeat="x in result"><a class="haschild" title="" href="">{{ x.GroupName }}</a>
                    <ul>
                    <div  ng-controller="SoftwareController">
                        <li ng-repeat="x in names"><a title="" href="">{{ x.name }}</a></li>
                    </div>
                    </ul>
                </li>
                </div>
            </ul>

我有另一个显示我的软件名称的控制器:

var SoftwareApp = angular.module('SoftwareApp', []);
SoftwareApp.controller('SoftwareController', function($scope, $http) {
  $http.get("selectSoftware.php") 
.then(function (response) {$scope.names = response.data.records;});
});

当有人点击软件组名称时,我有另一个列出我的软件名称的子菜单。

 <ul>
                    <div  ng-controller="SoftwareController">
                        <li ng-repeat="x in names"><a title="" href="">{{ x.name }}</a></li>
                    </div>
                    </ul>

我尝试做的是当有人点击软件组名称时,我的软件组ID保存在变量中并发送到我的SoftwareController。我显示== id

的软件名称

3 个答案:

答案 0 :(得分:2)

我建议您使用$ rootScope.broadcast进行此类操作。要非常简短,你可以像这样使用广播。 我想要发送数据的控制器就像这样写:

$rootScope.$broadcast("yourFuction", data);

在接收器控制器中获取如下数据:

$rootScope.$on("yourFuction", function(data){
    //do something
});

检查以获取更多信息:https://docs.angularjs.org/api/ng/type/$rootScope.Scope

感谢。

答案 1 :(得分:1)

您最好的解决方案是使用uirouter而不是ng-controller,并将ID作为状态参数传递。

另一种选择是使用组件而不是ng-controller,您可以将参数传递给。

答案 2 :(得分:1)

有很多方法。我会用一种方式提到你:

您可以创建一个服务来存储您要发送到另一个控制器的ID,如下所示:

angular.module('app').factory('commonService', function () {
        var myValue;
        return {
            set: function (o) {
                this.myValue = o;
            },
            get: function () {
                return this.myValue;
            }
        };
});

现在,将此服务注入以下控制器:

angular.module('app').controller('firstController', function ($scope, commonService) {
    $scope.setValue = function (value) {
        commonService.set(value);
    };
});

angular.module('app').controller('SecondController', function ($scope, commonService) {
    $scope.getValue = function () {
        $scope.value = commonService.get();
    };
});