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

时间:2015-09-02 10:17:32

标签: angularjs events methods controller broadcast

我尝试在CustomerController中调用civilitiyController的方法。因此,通过我的搜索,我发现事件的管理器调用方法,但我没有成功将结果从CivilityController返回给CustomerController。

我已经尝试过了:

1 /     civilitiesController:

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

customersController :

$scope.$broadcast("getListCivilities");
console.dir($scope.civilities) // after run civilities = undefined

2 / CivilitiesController:

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

CustomersController:

$scope.civilities = $scope.$broadcast("getListCivilities");
console.dir($scope.civilities); //display var of broadcast

3 /编辑: 在第一次回答后,我尝试了这个:

文明控制器:

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

customersController:

function test()
    {
        $scope.$on("getListCivilities", function (event, args) {
            $scope.civilities = args.list;
            console.log('test0');
            console.dir($scope.civilities);
        });
    }

    test();

$ scope。$ on永远不会执行,我不明白为什么。

我希望有人可以帮助我。

3 个答案:

答案 0 :(得分:0)

我想以下应该有效:

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

function CustomersController($scope) 
{
  $scope.$emit('someEvent', args);
}

JSFiddle(更多细节):http://jsfiddle.net/nikdtu/moo89kaw/

答案 1 :(得分:0)

检查此plunker

app.controller('Controller1', function($scope) {
  $scope.name = 'World';
  $scope.$on('ValueUpdated', function(event, args) {
    $scope.name = args.currentValue;
  });
});

app.controller('Controller2', ['$rootScope', '$scope', function($rootScope, $scope) {
  $scope.myData = "type here";
  $scope.broadCast = function() {
    $rootScope.$broadcast('ValueUpdated', {
      currentValue: $scope.myData
    });
  }

我使用广播,但你也可以通过服务和观察者来做到这一点。

答案 2 :(得分:0)

AhmetZeytindalı,这是我的整个CivilitiesController:

(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.civilities),结果总是未定义。