2016-05-06 6 views
3

У меня есть приложение AngularJS и внутри функции .run, я получаю настройки своего сайта с сервера и добавляю их в корневую область.AngularJS ждет ресурса в .run

.run(function ($rootScope, SettingResource) { 
    // Get the site settings (could be done in app controller?) 
    $rootScope.SiteSettings = SettingResource.get(); 
}); 

Мне нужно будет получить доступ к этим настройкам в других контроллерах. Как я могу дождаться, когда это будет готово до загрузки других контроллеров?

Просто для справки, вот служба ресурса:

function settingFactory($resource) { 
    return $resource('/api/settings', {id: '@id'}, {'update': {'method': 'PUT'}}); 
} 
+0

Можете ли вы получить настройки с помощью AJAX, а затем вызвать '.run' после завершения вызова AJAX? – Max

+1

Используйте обещание и попросите его решить его. Или используйте таймаут в контроллере, ожидая, что значение не будет равно нулю. –

+2

Я уверен, что блок .run с запуском async, поэтому вы не сможете ждать запроса на получение. Просто используйте какой-то злой jQuery или ванильный XMLhttp-запрос, чтобы преформировать запрос на получение, назначить этот материал в окно, а затем вручную загрузите угловое приложение. Затем в блоке .run назначьте материал из окна в ваш $ rootScopea, и ваши контроллеры будут иметь доступ к данным при их создании. –

ответ

0

Кажется любит, вы должны быть в состоянии использовать $ q.all здесь, хотя я никогда не пробовал сам.

Что-то вроде:

.run(function ($rootScope, SettingResource) { 
    $q.all(SettingResource.get().then(function(data) { 
     rootScope.SiteSettings = data; 
     console.log("ok, I'm done here.") 
    });  
}); 

Не то, что если SettingsResource основан на $ ресурсе, он не возвращает обещаний таким же образом, как прямой призыв к $ http.get делает. Проверьте это ответ на то, что я думаю, подобный сценарий с большим количеством деталей: Angular Resource calls and $q

+0

Это не работало для меня. У него все еще были те же проблемы. Я думаю, что самый лучший вариант - ручной бутстрап. – Sean

+0

Произошла ошибка или просто не дождалась обещания решить проблему? –

+0

Отсутствие ошибки, это просто иногда при обновлении страницы, иногда она не была решена достаточно быстро для остальной части страницы. – Sean

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