Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Как отловить событие контроллера, в другом контроллере (https://javascript.ru/forum/angular/43058-kak-otlovit-sobytie-kontrollera-v-drugom-kontrollere.html)

hopest 20.11.2013 11:35

Как отловить событие контроллера, в другом контроллере
 
Есть контроллер диалоговое окно, для ввода данных:

angular.module('pl', ['ui.bootstrap']);
var ModalDemoCtrl = function ($scope, $modal, $log) {

    $scope.user = {
        user: 'name',
        password: null
    };

    $scope.open = function () {

        $modal.open({
            templateUrl: 'myModalContent.html',
            backdrop: true,
            windowClass: 'modal',
            controller: function ($scope, $modalInstance, $log, user) {
                $scope.user = user;
                $scope.submit = function () {
                    $log.log('Submiting user info.');
                    $log.log(user);
                    $modalInstance.dismiss('cancel');
                }
                $scope.cancel = function () {
                    $modalInstance.dismiss('cancel');
                };
            },
            resolve: {
                user: function () {
                    return $scope.user;
                }
            }
        });
    };
};


Есть другой контроллер, который рисует например таблицу данных, хочется добиться взаимодействия этих контров. Например надо по нажатию на кнопку Ок диалогового окна, выполнить команду со второго контрола, например $scope.myData.push(nameData); Не понятно то как внедрить первый контрол во второй, а потом еще и вызвать в нем $scope.myData.push(nameData);

nerv_ 20.11.2013 23:06

вариантов много. Некоторые из них:
1. через события
2. через сервис

hopest 21.11.2013 11:54

Спасибо.

Вот написана функция open в controller Grid, с отслеживанием событий.
appRoot.controller('Grid', function ($scope,  $resource, DataCache, Lotes, AppAlert, $modal) {

    $scope.edit = {};
    $scope.open = function () {
        $scope.modalIns = $modal.open({
            templateUrl: '/home/dialog',
            backdrop: true,
            windowClass: 'modal',
            controller: function ($scope, $modalInstance, $log, edit) {
                $scope.edit = edit;
                $scope.ok = function () {
                    $modalInstance.close(edit);
                }
                $scope.cancel = function () {
                    $modalInstance.dismiss('cancel');
                };
            },

            resolve: {
                edit: function () {
                    return $scope.edit;
                }
            }
        });
    };


    $scope.dlgProduct = function () {
        $scope.open();
        $scope.modalIns.result.then(function (data) {
            $scope.save(data)
            //$scope.myData.push(selectedItem);
        }, function () {
            $log.info('Modal dismissed at: ' + new Date());
        });

    };


Вот в это коде все как бы хорошо, вызывается диалог, ловится событие в другой функции
$scope.dlgProduct = function () {
        $scope.open();
        $scope.modalIns.result.then(function (data) {
            $scope.save(data)
            //$scope.myData.push(selectedItem);
        }, function () {
            $log.info('Modal dismissed at: ' + new Date());
        });


Но все это хорошо работает когда ф-я описана в самом controller, но как описать эту работу в не controller, как factory (я так понимаю он не подходит), надо через сервис?

nerv_ 21.11.2013 12:16

как контроллеры в html располагаются? Если один внутри другого, то $scope.$emit|broadcast

или http://egghead.io/lessons/angularjs-...en-controllers

Maxmaxmaximus3 27.11.2013 02:37

И вообще пора бы инстанцировать модели а не напрямую со скоупом работать, к слову так.

nerv_, привет чувак) теперь я и в этом разделе обитать буду)

nerv_ 27.11.2013 16:53

Цитата:

Сообщение от Maxmaxmaximus3
теперь я и в этом разделе обитать буду)

ааа, спасите, помогите :D


Часовой пояс GMT +3, время: 12:02.