另一个控制器angularjs中控制器的调用方法

另一个控制器angularjs中控制器的调用方法,angularjs,events,methods,controller,broadcast,Angularjs,Events,Methods,Controller,Broadcast,我尝试在CustomerController中调用CivilityController方法。因此,通过搜索,我找到了事件的manager to call方法,但没有成功地将结果从CivilityController返回到CustomerController 我已经试过了: 一,/ 文明控制员: $scope.$on("getListCivilities", function(event, args){ $scope.civilities = getCivilitiesList(); }

我尝试在CustomerController中调用CivilityController方法。因此,通过搜索,我找到了事件的manager to call方法,但没有成功地将结果从CivilityController返回到CustomerController

我已经试过了:

一,/ 文明控制员:

$scope.$on("getListCivilities", function(event, args){
     $scope.civilities = getCivilitiesList();
});

customersController :

$scope.$broadcast("getListCivilities");
console.dir($scope.civilities) // after run civilities = undefined
$scope.civilities = $scope.$broadcast("getListCivilities");
console.dir($scope.civilities); //display var of broadcast
 function getCivilitiesList()
    {
        var reqGetCivilities = $http({ url: 'api/Civilities/Get' });
        reqGetCivilities.success(function(data){
            $scope.civilities = data;
            $scope.$broadcast("getListCivilities", { list: $scope.civilities });
            return data;
        });
    }
    getCivilitiesList(); 
function test()
    {
        $scope.$on("getListCivilities", function (event, args) {
            $scope.civilities = args.list;
            console.log('test0');
            console.dir($scope.civilities);
        });
    }

    test();
(function () {
'use strict';
'use strict';

angular
    .module('LSapp')
    .controller('CivilitiesCtrl', CivilitiesCtrl)

CivilitiesCtrl.$inject = ['$scope', '$http', '$rootScope'];

function CivilitiesCtrl($scope, $http, $rootScope) {
    function getCivilitiesList()
    {
        var reqGetCivilities = $http({ url: 'api/Civilities/Get' });
        reqGetCivilities.success(function(data){
            $scope.civilities = data;
        });
    }
    getCivilitiesList();

    function getList()
    {
        $rootScope.$broadcast("getListCivilities", { list: $scope.civilities });
    }
    getList();
}
2/文明控制员:

$scope.$on("getListCivilities" , function(event, args){
     var list = getCivilitiesList();
     return list;
});
客户控制器:

$scope.$on("getListCivilities", function(event, args){
     $scope.civilities = getCivilitiesList();
});

customersController :

$scope.$broadcast("getListCivilities");
console.dir($scope.civilities) // after run civilities = undefined
$scope.civilities = $scope.$broadcast("getListCivilities");
console.dir($scope.civilities); //display var of broadcast
 function getCivilitiesList()
    {
        var reqGetCivilities = $http({ url: 'api/Civilities/Get' });
        reqGetCivilities.success(function(data){
            $scope.civilities = data;
            $scope.$broadcast("getListCivilities", { list: $scope.civilities });
            return data;
        });
    }
    getCivilitiesList(); 
function test()
    {
        $scope.$on("getListCivilities", function (event, args) {
            $scope.civilities = args.list;
            console.log('test0');
            console.dir($scope.civilities);
        });
    }

    test();
(function () {
'use strict';
'use strict';

angular
    .module('LSapp')
    .controller('CivilitiesCtrl', CivilitiesCtrl)

CivilitiesCtrl.$inject = ['$scope', '$http', '$rootScope'];

function CivilitiesCtrl($scope, $http, $rootScope) {
    function getCivilitiesList()
    {
        var reqGetCivilities = $http({ url: 'api/Civilities/Get' });
        reqGetCivilities.success(function(data){
            $scope.civilities = data;
        });
    }
    getCivilitiesList();

    function getList()
    {
        $rootScope.$broadcast("getListCivilities", { list: $scope.civilities });
    }
    getList();
}
3/编辑: 在第一次回答之后,我尝试了以下方法:

文明控制员:

$scope.$on("getListCivilities", function(event, args){
     $scope.civilities = getCivilitiesList();
});

customersController :

$scope.$broadcast("getListCivilities");
console.dir($scope.civilities) // after run civilities = undefined
$scope.civilities = $scope.$broadcast("getListCivilities");
console.dir($scope.civilities); //display var of broadcast
 function getCivilitiesList()
    {
        var reqGetCivilities = $http({ url: 'api/Civilities/Get' });
        reqGetCivilities.success(function(data){
            $scope.civilities = data;
            $scope.$broadcast("getListCivilities", { list: $scope.civilities });
            return data;
        });
    }
    getCivilitiesList(); 
function test()
    {
        $scope.$on("getListCivilities", function (event, args) {
            $scope.civilities = args.list;
            console.log('test0');
            console.dir($scope.civilities);
        });
    }

    test();
(function () {
'use strict';
'use strict';

angular
    .module('LSapp')
    .controller('CivilitiesCtrl', CivilitiesCtrl)

CivilitiesCtrl.$inject = ['$scope', '$http', '$rootScope'];

function CivilitiesCtrl($scope, $http, $rootScope) {
    function getCivilitiesList()
    {
        var reqGetCivilities = $http({ url: 'api/Civilities/Get' });
        reqGetCivilities.success(function(data){
            $scope.civilities = data;
        });
    }
    getCivilitiesList();

    function getList()
    {
        $rootScope.$broadcast("getListCivilities", { list: $scope.civilities });
    }
    getList();
}
客户控制器:

$scope.$on("getListCivilities", function(event, args){
     $scope.civilities = getCivilitiesList();
});

customersController :

$scope.$broadcast("getListCivilities");
console.dir($scope.civilities) // after run civilities = undefined
$scope.civilities = $scope.$broadcast("getListCivilities");
console.dir($scope.civilities); //display var of broadcast
 function getCivilitiesList()
    {
        var reqGetCivilities = $http({ url: 'api/Civilities/Get' });
        reqGetCivilities.success(function(data){
            $scope.civilities = data;
            $scope.$broadcast("getListCivilities", { list: $scope.civilities });
            return data;
        });
    }
    getCivilitiesList(); 
function test()
    {
        $scope.$on("getListCivilities", function (event, args) {
            $scope.civilities = args.list;
            console.log('test0');
            console.dir($scope.civilities);
        });
    }

    test();
(function () {
'use strict';
'use strict';

angular
    .module('LSapp')
    .controller('CivilitiesCtrl', CivilitiesCtrl)

CivilitiesCtrl.$inject = ['$scope', '$http', '$rootScope'];

function CivilitiesCtrl($scope, $http, $rootScope) {
    function getCivilitiesList()
    {
        var reqGetCivilities = $http({ url: 'api/Civilities/Get' });
        reqGetCivilities.success(function(data){
            $scope.civilities = data;
        });
    }
    getCivilitiesList();

    function getList()
    {
        $rootScope.$broadcast("getListCivilities", { list: $scope.civilities });
    }
    getList();
}
$scope.$on从未执行过,我不明白为什么


我希望有人能帮助我。

我想下面应该可以:

function CivilitiesController($scope) 
{
  $scope.$on('someEvent', function(event, args) {});
  // another controller or even directive
}

function CustomersController($scope) 
{
  $scope.$emit('someEvent', args);
}
JSFIDLE(有关更多详细信息):

请检查此项


我用过广播,但你也可以用服务和观察者来做

Ahmet Zeytindalı,这是我的整个文明控制者:

$scope.$on("getListCivilities", function(event, args){
     $scope.civilities = getCivilitiesList();
});

customersController :

$scope.$broadcast("getListCivilities");
console.dir($scope.civilities) // after run civilities = undefined
$scope.civilities = $scope.$broadcast("getListCivilities");
console.dir($scope.civilities); //display var of broadcast
 function getCivilitiesList()
    {
        var reqGetCivilities = $http({ url: 'api/Civilities/Get' });
        reqGetCivilities.success(function(data){
            $scope.civilities = data;
            $scope.$broadcast("getListCivilities", { list: $scope.civilities });
            return data;
        });
    }
    getCivilitiesList(); 
function test()
    {
        $scope.$on("getListCivilities", function (event, args) {
            $scope.civilities = args.list;
            console.log('test0');
            console.dir($scope.civilities);
        });
    }

    test();
(function () {
'use strict';
'use strict';

angular
    .module('LSapp')
    .controller('CivilitiesCtrl', CivilitiesCtrl)

CivilitiesCtrl.$inject = ['$scope', '$http', '$rootScope'];

function CivilitiesCtrl($scope, $http, $rootScope) {
    function getCivilitiesList()
    {
        var reqGetCivilities = $http({ url: 'api/Civilities/Get' });
        reqGetCivilities.success(function(data){
            $scope.civilities = data;
        });
    }
    getCivilitiesList();

    function getList()
    {
        $rootScope.$broadcast("getListCivilities", { list: $scope.civilities });
    }
    getList();
}
})()

以及检索列表的方法:

(function () {
'use strict';

angular
    .module('LSapp')
    .controller('CustomersCtrl', CustomersCtrl)

CustomersCtrl.$inject = ['$scope', '$http', '$location', '$modal', '$window', '$compile','$cookies', '$state','locker','$q','$timeout', '$rootScope'];

function CustomersCtrl($scope, $http, $location, $modal, $window, $compile, $cookies, $state, locker, $q, $timeout) {
     //some code
 function test()
    {
        $scope.$on("getListCivilities", function (event, args) {
            $scope.civilities = args.list;
            console.log('$on args : ');
            console.dir(args);
        });
    }
    test();

}
}))


方法$on没有运行,如果我将console.log($scope.civility)放在方法之后,结果总是未定义的。

当我看到您的示例时,我认为我犯了一个错误。如果我想将我的文明列表发送给customerController,我不应该将$broadcast方法放在我的文明控制器中,将$on方法放在customerController中?是的,将controller2视为您的文明控制器,将controller1视为您的客户控制器。所以控制器2广播控制器1动作我不知道你是否看到我的编辑。但是我试着像你一样做,但是我的$on没有被调用,我不知道如何解决它。更改$scope。$将此广播到$rootScope。$广播并将rootscpope注入你的文明控制器我已经测试过了,但它不起作用。鉴于我的控制器有两种方法,我不确定这是声明控制器和使用它的正确方法。但这不是我的全部。我将发布我的整个civilitiesController,但customerController太长了,并且该控制器的主要部分没有检测到我的问题。删除整个getlist函数并删除getlist();也然后在reqGetCivilities.success(函数(数据))中移动$rootScope.$broadcast{我已经测试了它,但它不起作用。正因为如此,我创建了一个调用广播的方法。但我认为我的问题来自CustomerController和$on方法,而不是civilityController。我不确定,因为我不知道如何测试广播的值,但当我放置一个console.log()时在广播方法中,它是显示,而不是在我的$on方法中。我设法实现了控制器之间的通信。事实上,这确实是一个小错误,我忘记了实例化我的文明控制器。感谢您的帮助,这对于更好地理解控制器之间的通信非常有用。