Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Функция factory из другого контролера (https://javascript.ru/forum/angular/57821-funkciya-factory-iz-drugogo-kontrolera.html)

A1x1On2015 21.08.2015 12:03

Функция factory из другого контролера
 
Здравствуйте,
Мой код:
var ModuleManager = angular.module("AngularManager", ["ngRoute"]);

ModuleManager.controller("OpenTask", function ($scope, OpenTaskService) {

        $scope.ClickedTask = function (TaskId) {
            key = TaskId;

            $(".RemoveTask").fadeIn();
            $(".saveTask").val("Сохранить");

            var LIKEFUNCTION = OpenTaskService.GetTask().then(function (t) {
                $scope.Task = t.data;
                if ($scope.Task[3] !== "1") {
                    $(".finishtag").fadeIn();
                    $(".Cancelfinishtag").fadeOut();
                } else {
                    $(".finishtag").fadeOut();
                    $(".Cancelfinishtag").fadeIn();
                }
}

ModuleManager.factory("OpenTaskService", function ($http) {
        var fac2 = {};
        fac2.GetTask = function () {
            return $http({ method: 'GET', url: "/Manager/OpenTask/", params: { 'TaskId': key } });
        }
        return fac2;
    });


Я хочу из другого контроллера вызвать это OpenTaskService.GetTask() в идеале:

ModuleManager.controller("TaskFrom", function ($scope, TService) {

         $scope.EndActTask = function (obj) {
            idTask = obj.currentTarget.id;
            TService.EndActTask().then(function (d) {
                $scope.Tags = d.data;
                $("i#" + idTask).children(".d-status").html("<b>Cтатус: </b>Завершен");
                LIKEFUNCTION // тут вызвать сервис точнее не сам сервис, а функцию которая его реализует в контроллере, как то так можно придумать??
            }, function () {
                alert("Fail of getting tags");
            });
        }


        }

ha_sash 21.08.2015 12:55

А события не подойдут?

A1x1On2015 21.08.2015 15:03

Цитата:

Сообщение от ha_sash (Сообщение 385054)
А события не подойдут?

нет, не подойдут

ha_sash 21.08.2015 17:41

А чисто из интереса, а почему события не подойдут?

A1x1On2015 21.08.2015 18:33

Цитата:

Сообщение от ha_sash (Сообщение 385089)
А чисто из интереса, а почему события не подойдут?

Мне на ум почему-то приходят всякие триггеры с извращением. Возможно я что-то не понимаю, как можно это реализовать?

ha_sash 24.08.2015 13:07

В контроллере AngularManager определяете свою функцию, и там же делаете подписчика типа:
ModuleManager.controller("OpenTask", function ($scope) {

    $scope.$on('myEvent', function(event, arg1, arg2) {
       //Тут дергаете то что нужно
    });
});


//Ну а само событие описывается так
ModuleManager.controller("TaskFrom", function ($scope, $rootScope) {
    $rootScope.$emit('myEvent', 1, 2);
});


$rootScope просто чтоб событие было глобальное это вовсе не обязательно оно распространяется по иерархии в документации там вполне доступно описано..


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