Как поделиться переменной $scope одного контроллера с другим в AngularJS?

У меня есть это:

app.controller('foo1', function ($scope) {
  $scope.bar = 'foo';
});
app.controller('foo2', function ($scope) {
  // want to access the $scope of foo1 here, to access bar
});

Как бы я это сделал?


person Lucas    schedule 22.03.2014    source источник
comment
Вы можете найти очень четкий ответ, опубликованный здесь   -  person Alankar Choudhary    schedule 19.07.2016
comment
@AlankarChoudhary Ах, да, хотя принятые ответы на вопросы, похоже, довольно сильно различаются, так что, возможно, это не требует закрытия.   -  person Lucas    schedule 19.07.2016


Ответы (2)


Вы можете использовать службу Angular для совместного использования переменных несколькими контроллерами.

angular.module('myApp', [])
.service('User', function () {
    return {};
})

Для обмена данными между независимыми контроллерами можно использовать службы. Создайте сервис с моделью данных, которой необходимо поделиться. Внедрите сервис в соответствующие контроллеры.

function ControllerA($scope, User) {
    $scope.user = User;
    $scope.user.firstname = "Vinoth";
}

function ControllerB($scope, User) {
    $scope.user = User;
    $scope.user.lastname = "Babu";        
}
person Thalaivar    schedule 22.03.2014
comment
Что делает $scope.user = User; без кавычек? - person Lucas; 23.03.2014
comment
Ах, верно. У меня также есть аргумент параметра маршрута в ControllerA, так как мне добавить его? - person Lucas; 24.03.2014
comment
что, если я не хочу использовать сервис или фабрику?? есть ли способ обойти - person Sagar Devanga; 17.05.2014
comment
@SagarDevanga: модель пабов/саб-моделей - person Thalaivar; 13.02.2015
comment
Я знаю, что это старый пост, но он был спасателем! - person aemorales1; 03.03.2016

Вы просто можете использовать $emit/$broadcast для перевода изменений данных из одной области контроллера в другую. Или просто сохраните эти переменные в $rootScope.

person Sergey Moiseev    schedule 22.03.2014
comment
Ответ с примером является более полезным ответом - person tno2007; 02.12.2015