Как получить доступ к $ scope от одного контроллера к другому в angular

0

У меня есть коды контроллеров из разных js файлов.

NLGoalsCtrl.js

angular.module('mysite').controller('NLGoalsCtrl', function ($scope) {
    $scope.goals_selected = [];
});

NLSessionsCtrl.js

angular.module('mysite').controller('NLSessionsCtrl', function ($scope) {
    //access $scope.goals_selected here
});

Мне нужно иметь доступ к $ scope.goals_selected из NLSessionsCtrl. Как мне это сделать? Спасибо, парни.

  • 1
    у вас может быть угловая служба, которая будет отвечать за обмен данными между вашим контроллером
  • 0
    Возможно, вы захотите использовать угловой сервис для обмена этими данными, поскольку области являются локальными для контроллера.
Показать ещё 2 комментария
Теги:

3 ответа

3
Лучший ответ

Используйте фабрику/службу для хранения goals которые будут отвечать за обмен данными между контроллерами.

myApp.factory('myService', [function() {
        var goals = {};
        return {
            getGoals: function() {
                return goals
            },

            setGoals: function(op) {
                goals = op;
            },
        }
    }])
    .controller('NLGoalsCtrl', [function($scope, myService) {
        $scope.goals_selected  = {};
        //Update goals_selected
        myService.setGoals($scope.goals_selected );
    }])
    .controller('NLSessionsCtrl', [function($scope, myService) {
        //Fetch
        $scope.goals_selected  = myService.getGoals();
    }]);
  • 0
    это будет действительно работать? Я имею в виду, что если goal_selected изменено из представления после выполнения myService.setGoals ($ scope.goals_selected)? В этом случае myService.getGoals () выдаст мне обновленные значения или устаревшую копию данных?
  • 1
    Вы должны использовать указатель на переменную, а не функцию. Таким образом, вы всегда будете синхронизировать его, что означает, что угловые регистры изменяются, а поскольку указатели совпадают, он также будет обновляться в другом контроллере. ИЛИ вам нужно будет установить наблюдатели в ваших контроллерах, которые будут оценивать заводские функции
Показать ещё 1 комментарий
1

$ scope - это "объект", который "связывается" с элементом DOM, где вы применяете контроллер. Таким образом, контекст $ scope остается внутри контроллера.

Если вы хотите получить доступ к переменным в двух контроллерах, попробуйте поделиться им через service/Factory или $ rootScope

Вот sample App

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню