2015-09-02 5 views
0

Я пытаюсь вызвать метод civilitiyController в CustomerController. Таким образом, при моем поиске я нашел диспетчера событий для вызова метода, но мне не удалось вернуть результат из CivilityController в CustomerController.Метод вызова контроллера в другом контроллере angularjs

Я уже попытался это:

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/Edit: После первого ответа, я попытался это:

любезностями контроллер:

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

$ сфера $ на никогда не выполняется, и я не понять, почему.

Я надеюсь, что кто-то может мне помочь.

+0

изменить $ scope. $ Передавать это на $ rootScope. $ Broadcast и вставлять rootcpope в ваш контроллер civilities –

+0

Я уже тестировал и не работает. – JonathanTheBrosh

+0

Я не уверен, что это правильный способ объявить контроллер и использовать его –

ответ

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

Я использовал передачу, но вы можете сделать это с помощью услуг и наблюдатели тоже.

+0

Когда я вижу ваш пример, я думаю, что сделаю ошибку.Если я хочу отправить свой список civilities в customerController, я не должен поместить метод широковещательной рассылки в мой civilitiesController и метод $ on в CustomerController? – JonathanTheBrosh

+0

Да, думаю, контроллер2 как ваш civilitiesController и controller1 как ваш клиент. поэтому контроллер2 вещает контроллер1 действует –

+0

Я не знаю, видите ли вы мое редактирование. Но я попытался сделать это, как вы, но мой $ on не вызван, и я не знаю, как это решить. – JonathanTheBrosh

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/

0

Ахмет Zeytindalı, это вся моя 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 не запускается и если после метода put console.log ($ scope.civilities) результат всегда не определен.

+0

удалить всю функцию getlist и удалить getList(); слишком. Затем переместите $ rootScope. $ Broadcast внутри reqGetCivilities.success (функция (данные) { –

+0

Я уже тестировал его, и он не работает. Для этого я создал метод для вызова широковещательной передачи. Но я думаю, что моя проблема возникла у CustomerController с методом $ on, а не с civilityController. Я не уверен, потому что я не знаю, как проверить значение трансляции, но когда я помещаю console.log() в широковещательный метод, это отображается, а не в мой метод $ on. – JonathanTheBrosh

+0

Мне удалось наладить связь между контроллерами. На самом деле это была небольшая ошибка, я забыл ввести в действие мой CivilityControlller. Спасибо за вашу помощь, было очень полезно лучше понять связь между контроллером. – JonathanTheBrosh

Смежные вопросы