2016-05-02 1 views
0

Я пытаюсь использовать глобальные переменные из одного файла в другом файле. У меня есть работа из исходного файла (controller.js) в html-файл, но я не могу заставить его работать с controller.js на service.js.Использование globals в angularjs

Я довольно новый, угловатый и пытающийся понять это.

+1

Без кода и четкого описания проблемы ответить невозможно. Но вы все равно не должны этого делать. глобалы - зло. Используйте то, что Angular предоставляет для обмена информацией между компонентами: услуги. –

+0

Я знаю, что глобалы - это зло. Я стараюсь избегать их любой ценой. Но то, что я пытаюсь сделать, это вызвать функцию с сервера и на основе информации, которую я получаю, я хочу показать или скрыть какой-то ионный элемент. Я использую ng-show, чтобы заставить его работать из файла Controller.js, но я хотел бы вызвать функцию из services.js. Каков наилучший способ добиться этого с помощью глобальных глобалов –

+0

Из урока angularJS https://docs.angularjs.org/tutorial/step_05 –

ответ

3

Кажется, вы хотите объявить переменную в своем контроллере, чтобы ваша служба могла записывать данные в эту переменную. Вы должны думать об этом наоборот, проходя службу к контроллеру через инъекции зависимостей

app.controller('homeCtrl', function($scope, myServiceIsNowInjected){ 

}) 

, а затем вызов метода на этой службе в контроллере:

myServiceIsNowInjected.getDataFromServer('my param'); 

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

myServiceIsNowInjected.getDataFromServer('my param').then(function(data){ 
    $scope.viewvar = data;  
}, function(err){ console.log(err) }); 

Таким образом, вместо того, проходя глобальную переменную в службу для обслуживания, чтобы записать данные в этой переменной, а вы попросите службу для выполнения какой-либо задачи , и контроллер должен записать результат этой задачи в область $ scope, сделав ее доступной для представления.

Полный пример такого использования можно получить, как указано here.

$rootScope должен не использоваться для такого рода вещи - это вызовет у вас проблемы, как растет ваше приложение, в то время как с использованием модульных контроллеров, которые тянут информацию от услуг не будут.

+0

Спасибо, это именно то, что я искал. –

0

Один из вариантов - использовать $ rootScope.

В контроллере можно определить:

$rootScope.variable = 'your value'; 

А потом, в службе или другого контроллера вы используете его:

Console.log($rootScope.variable); 

Помните впрыскивать $ rootScope (как вы делаете с $ рамки) в определении контроллеров/сервисов.

+0

когда вы говорите, впрыснуть вы имеете в виду что-то вроде этой функции GetWebsiteSetting ($ рамки, соотв, $ rootScope) { –

+0

Где вы определяете контроллер: angular.module ('app.controllers', []) .controller (» TestCtrl ', функция ($ scope, ** $ rootScope **) { ... }); –

+0

ok да, я сделал это. теперь мой контроллер выглядит так. .controller («StartpageCtrl», function ($ rootScope, $ scope) { $ scope.showstartCard = true; $ rootScope.variable = "ваша переменная"; }); и в моей стороне обслуживания он говорит, что can not find variable undefined –