2014-10-22 3 views
0

Я подключаюсь к API через скрипт (init.js) при запуске моего углового приложения. Затем я получаю som информацию, такую ​​как имя пользователя и идентификатор пользователя, которые я хочу определить как глобальные значения для использования в приложении AngularJS.Передать переменные в приложение AngularJS

Как передать переменные для использования в приложении AngularJS?

Теперь я должен определить переменные в MainController, чтобы иметь возможность использовать их в любом месте.

init.js

(function() { 
function appStart() { 
    //Get variables 
    var userId = 123; 
    var username = 'This is my name'; 

    //Init Angular App 
    angular.bootstrap(document, ['myApp']); //How do I use the variables in the angular app? 
} 

function genericError() { 
    console.error('Something went wrong'); 
} 

TT.native.init() 
.done(appStart) 
.fail(genericError); 
})(); 

app.js

(function() { //Start 
var app = angular.module('myApp', [ 
'myControllers', 
'myDirectives', 
'myFilters', 
'myServices', 

'ui.router' 
]); 

controller.js

var app = angular.module('myControllers', []); 

app.controller('MainController', function ($scope, $state) { 
    $scope.userName = ""; //I want to use the variable from INIT.JS here 
    $scope.userId = 0; //I want to use the variable from INIT.JS here 
}); 
+0

Почему вы не подключаете api в угловом приложении? –

+0

Как мне это сделать? Я не знаю, как это сделать. Я использую эту систему на основе jQuery, которая должна иметь код инициализации. – peta

+0

Вы можете создать сервис для своего первого блока кода (чтобы получить пользовательские данные). Затем вы можете вызвать его в run-блоке в angularjs (app.run (...)). После этого момента, когда вам понадобятся эти переменные, вы можете вызвать их из этой службы. Я знаю, что это может быть слишком много для начинающего в угловатом, но это последовательный и «угловой» способ сделать это ... –

ответ

1

Самым простым решением было бы:

var userId = -1; 
var username = ''; 
(function() { 
function appStart() { 
    //Get variables 
    userId = 123; 
    username = 'This is my name'; 

    //Init Angular App 
    angular.bootstrap(document, ['myApp']); //How do I use the variables in the angular app? 
} 

function genericError() { 
    console.error('Something went wrong'); 
} 

TT.native.init() 
.done(appStart) 
.fail(genericError); 
})(); 

Тогда в контроллере:

app.controller('MainController', function ($scope, $state) { 
    $scope.userName = userId; 
    $scope.userId = username; 
}); 

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

+0

Спасибо! Каким образом это не хороший подход? Мне очень хотелось бы посмотреть, как я могу это сделать в приложении Angular. перед загрузкой первого состояния. Если бы я мог выполнять то же самое, что и сейчас, в init.js, это было бы здорово! – peta

+0

Начинайте копания (метод фабрики) и запускайте метод угловых. И принимайте это как правильный ответ, если это решение на данный момент ... –

+0

в порядке, было бы полезно хотя бы знать, каким образом это плохой подход, поэтому я могу проанализировать, будет ли это долговременным решением. – peta

0

Вы можете использовать angular.module('myApp').value или angular.module('myApp').constant перед буксировкой углов. В вашем контроллере вы должны добавить переменные в зависимости.

+0

Спасибо! Похоже на хороший подход. Не могли бы вы привести пример? Я не опытный кодер. – peta

+0

Хорошо, поэтому я могу добавить значения. Но как установить переменные в значение, когда я загружаю углы? – peta

+0

angular.module ('myApp'). Value ('userName', userName) – Mikalai

0

Вы, вероятно, используете ngRouter или uiRouter, чтобы вы могли resolveTT.native.init перед входом в первый маршрут/состояние.

+0

Да, используя маршрутизатор Ui. Как мне это сделать? Не могли бы вы поместить его в код? – peta

Смежные вопросы